Используйте команду sed для определенных строк

Otra forma de evitar el problema de división de palabras aquí es:

set | grep -w IFS=

que genera el IFS predeterminado como

IFS=$' \t\n'

Consulte esta publicación relacionada en Stack Overflow:

2
13.06.2019, 14:56
2 ответа

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

sed -i -r '/^10?:/ {s/\{\+//; s/\+}//; s/\[-.*-]//g}' error.txt

Замены выполняются, только если строка начинается с 1:или 10:. Это результат:

1:module counter ( clk, reset, enable, dat_out );
4:  input clk, [-reset ;-] {+reset, enable;+}
5:  wire   {+N69, N70, N71,+} N72, N73, N74, N75, N76, N77, N78, N79, N80,
10:  EDFFX2AD \dat_out_sig_reg[0]  ( .D(N69),.E(N96),.CK(clk),.Q(dat_out[0])
12:  EDFFX2AD \dat_out_sig_reg[1]  ( {+.D(N70),+}.E(N94),.CK(clk),.Q(dat_out[1])
14:  EDFFX2AD \dat_out_sig_reg[2]  (.D(N71), [-.E(synopsis_unconnected),-] {+.E(N92),+}.CK(clk),.Q(dat_out[2])

Условие может быть в номерах строк :это будет обрабатывать только первую строку:

sed -i -r '1 {s/\{\+//; s/\+}//; s/\[-.*-]//g}' error.txt

Поскольку вы упомянули Perl, вы можете предпочесть использовать следующее:

perl -i -pe 'if (/^10?:/) {s/\{\+//; s/\+}//; s/\[-.*-]//g}' error.txt

или:

perl -i -pe 'if ($.==1 or $.==10) {s/\{\+//; s/\+}//; s/\[-.*-]//g}' error.txt
0
27.01.2020, 22:26

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

Для вашего первого примера вы можете попробовать 3-ю строку, которая пронумерована как #4:

sed "3 s/{+//" error.txt

Или, если вам нужен скрипт, вы можете поработать над этим фрагментом:

#!/bin/bash

echo -e "Usage:\t./my_sed.sh linenumber file\n"
sed "$1 s/{+//" $2
0
27.01.2020, 22:26

Теги

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