Вам нужно заключить шаблон sed
в двойные кавычки, чтобы оболочка могла расширить переменную перед передачей ее в sed
:
sed "/^${req_file}/d" temp.csv
Вам также нужно использовать ^
якорь, чтобы указать sed
, что этот шаблон должен встречаться в начале строки.
Ваша команда 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
Используйте -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
Вы можете указать 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]+)"/'