У меня есть файл, содержащий некоторые данные как в следующем примере:
data1: it is my data
data2: some more data
data3: even some more data
То, что я хочу, является следующим выводом в другом файле:
it is my data
some more data
even some more data
Ведите меня, как сделать это!
Это должно работать:
sed -i .bak 's/[^:]*: *//' file
Объяснение: -i .bak
отредактирует файл на месте и создаст резервное копирование названного оригинала filename.bak
. s/pat/replacement/
замена средств pat
с replacement
. [^:]*: *
средства соответствуют самой длинной строке не -:
символы, сопровождаемые a :
затем один или несколько располагает с интервалами. Конечный результат состоит в том, что это удалит все до первого :
и следующие пробелы.
Этот подход имеет преимущество работы с data:
или foo:
или безотносительно и будет также работать, если у Вас будут несколько :
на той же строке. Например, это может иметь дело с этим:
data: a line that contains : a colon!
Это очень просто, если Вы используете awk
:
awk -F ': ' '{for (i=2; i<=NF; i++) print $i}' file_name > new_file_name
Каждая строка разделяется в большем количестве полей с помощью ': '
как разделитель, и распечатайте все кроме первого поля. Вывод перенаправляется к new_file_name
.
Это похоже на задание для cut
cut -d: -f2- file > new_file
Можно использовать Vim в режиме Ex:
ex -sc '%s/[^:]*: *//|x' file
%
поиск все строки
s
замена
x
сохраняет и закрывается
Откройте файл в vim
редактор следующим образом:
vi <filename>
и затем нажимают esc и затем следующее:
:%s/data.: //gc
Здесь %s
используется для строковой замены
/
, разделитель между командой, и строки
data.:
первая строка, .
используется для любого отдельного символа gc
, используется, чтобы найти и подтвердить прежде, чем заменить
Ваш входной файл похож на вывод команды grep, скажите:
grep data data*
, Если это действительно имеет место, можно использовать-h опцию самой команды grep для получения то, в чем Вы нуждаетесь:
grep -h data data*