Заменить строку строки - PullRequest
2 голосов
/ 19 июня 2011

у меня есть файл с таким количеством строк

Код:

randomstring | randomstring

и я хочу удалить все до "|".

Есть идеи, как это сделать с помощью sed / awk?

ТИА!

Ответы [ 5 ]

3 голосов
/ 20 июня 2011

Попробуйте это

sed 's/^[^|]*.//' 

В основном с начала строки, подставьте все от начала до "|"с пробелом

2 голосов
/ 19 июня 2011

Убедитесь, что вы запустили начало и конец строки:

sed -e  's/^.*\(|.*\)$/\1/'
1 голос
/ 20 июня 2011

Для кратных | в строках:

astr | bstr | cstr | dstr

Жадный матч

sed 's/.*|//'  < file  # will result: ` dstr`
sed 's/.*|/|/' < file  # will result: `| dstr`

Нежадное совпадение

sed 's/^[^|]*|//'  < file # will result: ` bstr | cstr | dstr`
sed 's/^[^|]*|/|/' < file # will result: `| bstr | cstr | dstr`

короче - с помощью команды cut

cut -d'|' -f-1   < file # will result: `astr `
cut -d'|' -f-2   < file # will result: `astr | bstr `
cut -d'|' -f2-   < file # will result: ` bstr | cstr | dstr`
cut -d'|' -f3-   < file # will result: ` cstr | dstr`
cut -d'|' -f2    < file # will result: ` bstr `
cut -d'|' -f2-3  < file # will result: ` bstr | cstr`
cut -d'|' -f2,4  < file # will result: ` bstr | dstr`
1 голос
/ 20 июня 2011

попробуйте

awk '{print $3}' file
1 голос
/ 19 июня 2011

В awk вы можете установить разделитель полей практически на что угодно.

awk 'BEGIN{ FS="|" }{print FS, $2}' yourfilename
...