Sed не выводит совпадения из регулярного выражения в файл

Вам нужно заключить шаблон sed в двойные кавычки, чтобы оболочка могла расширить переменную перед передачей ее в sed:

sed "/^${req_file}/d" temp.csv

Вам также нужно использовать ^ якорь, чтобы указать sed, что этот шаблон должен встречаться в начале строки.

0
16.05.2019, 18:46
3 ответа

Ваша команда sedне должна выводить только совпадения.

s/pattern/replacement/gпросто заменяет шаблон на замену, все остальное не трогаем.

На самом деле на выходе должна быть не точная копия, а "после удаления шаблона.


Вы можете использоватьgrep

grep -Eo '[-A-Z0-9]+"' data.txt | sed 's/"$//' > clean.txt

или

grep -Po '[-A-Z0-9]+(?=")' data.txt > clean.txt
2
28.01.2020, 02:22

Используйте -n для отображения только совпадающих строк.

sed -n -r 's/([-A-Z0-9]+)"/\1/g' data.txt > clean.txt

и по второму вопросу замените то, что вам не нужно, ничем:

sed -n -r 's/^.*"([-A-Z0-9]+)".*/\1/g' data.txt > clean.txt
1
28.01.2020, 02:22

Вы можете указать sed печатать только в случае успешной подстановки. Используйте команду tдля того, чтобы :он перешел на указанную метку, если она была. bпропускает остальную часть кода, pпечатает замененную строку.

sed -n -r 's/.*"([-A-Z0-9]+)".*/\1/g;t a;b;:a p' 

Мне пришлось поставить две отсутствующие двойные кавычки в последних двух строках.

Perl, вероятно, более удобен для чтения:

perl -lne 'print $1 if /([-A-Z0-9]+)"/'
0
28.01.2020, 02:22

Теги

Похожие вопросы