Удалите строки из файла с помощью awk или sed на основе переменной от предыдущей команды

В sed:

sed '/D$/{N;/R$/s/\n-from/\n-this/}' your_file

Расширенный с комментариями:

sed ' /D$/{                          # If the current line ends in D
            N;                       # Append the next line to the pattern space
            /R$/s/\n-from/\n-this/   # If you find R at end-of-line, substitute
      }' your_file
2
13.05.2014, 02:30
4 ответа

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

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

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

5
27.01.2020, 21:49

Нет необходимости в awk или sed здесь:

grep -v "^$req_file_curr," file

Обратите внимание, что ( как и для sed или awk , хотя и в меньшей степени), предполагается, что $ req_file_curr не содержит операторов регулярного выражения (например, . , * ...).

Если это так, вам придется экранировать эти символы, или с помощью awk вы можете использовать подход, используя его функцию index () :

S="$req_file_curr," awk 'index($0, ENVIRON["S"]) != 1' < file
5
27.01.2020, 21:49

Вы установили req_file_curr, но используете req_file. И ваша команда sed не будет работать, так как переменная shell не может быть развернута в вашей команде sed.

Вы можете попробовать следующее:

$ sed '/'"${req_file_curr}"'/d' file
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4

или используя sed с двойными кавычками:

sed "/${req_file_curr}/d" file

и используя awk:

$ awk -v req=$req_file_curr '$0 !~ req' file
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4
4
27.01.2020, 21:49

Эд-решение будет выглядеть примерно так.

  req_file_curr=req1

  printf '%s\n' "g/^$req_file_curr/d"  w | ed -s temp.csv

Он редактирует файл на месте, поэтому сначала проверьте, прежде чем запускать это с вашими файлами.

0
27.01.2020, 21:49

Теги

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