Мені потрібно видалити текст із рядка перед роздільником.
Наприклад:
(123434): hello::{apple,orange,mango}.
Мені потрібно видалити текст до початку :. тобто (123434).
Чи є якась команда в Linux для виконання цього завдання?
Мені потрібно видалити текст із рядка перед роздільником.
Наприклад:
(123434): hello::{apple,orange,mango}.
Мені потрібно видалити текст до початку :. тобто (123434).
Чи є якась команда в Linux для виконання цього завдання?
Відповіді:
Ця sedкоманда повинна виконати трюк. Наступна команда замінить файл:
sed -i 's/^[^:]*:/:/' file
Щоб просто надрукувати вихід, зніміть -iпрапор. Щоб помістити вихід у новий файл, видаліть -iпрапор і перенаправіть вихід:
sed 's/^[^:]*:/:/' file > new_file
Це можна зробити за допомогою досить простої інструкції Bash :
mytext="(123434): hello::{apple,orange,mango}."
echo ${mytext#*)}
Це надрукується : hello::{apple,orange,mango}.. Ви можете вирізати префікси та суфікси аналогічним чином. Більше того, визначення префікса та суфіксу можуть містити підстановки.
Вирізати префікс - до першого збігу підстановочних символів префіксу: ${variable#prefix}
Вирізати префікс - до останнього збігу підстановки підстановки: ${variable##prefix}
Вирізати суфікс - до першого збігу підстановочних символів суфіксу: ${variable%suffix}
Вирізати суфікс - до останнього збігу підстановочних символів суфіксу: ${variable%%suffix}
На перший погляд це може виглядати незрозуміло, див. Наступний приклад:
mytext="xAxBxAxBx"
echo ${mytext#*A} # will print: xBxAxBx
echo ${mytext##*A} # will print: xBx
echo ${mytext%B*} # will print: xAxBxAx
echo ${mytext%%B*} # will print: xAx
echo ${mytext%%C*} # will print: xAxBxAxBx
В останньому прикладі шаблон не збігається, тому нічого не вирізати.
echo ${mytext#*:}:. Це правильно обробляє такі лінії, як (123)(434): hello::{apple,orange,mango}.і 123434: hello::{apple,orange,mango}.
sedабоawk