Мне нужно удалить текст из строки перед разделителем.
Например:
(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