sed для замены совпадающего слова до конца строки

Вот несколько вариантов использования perl.

Поскольку вы сопоставляете только один символ, вы можете использовать tr/C// (перевод без замены), чтобы вернуть количество совпадений C :

perl -lne 'print if tr/C// != 1' file

В более общем случае, если вы хотите сопоставить многосимвольную строку или регулярное выражение, вы можете использовать это:

perl -lne 'print if (@m = /C/g) != 1' file

Это присваивает совпадения регулярного выражения /C/g list @m и выводит строки, если длина этого списка не равна 1.

Переключатель -i можно добавить для редактирования «на месте».

0
15.02.2017, 08:21
3 ответа
sed -i "/nfin=[0-9]/{s//&\n/;P;d;}" sample_text

удалит остаток строки после nfin=[0-9]
Для строки (строк) с nfin=[0-9]:

  • поставить \newline после шаблона (&)
  • Print строка перед \newline
  • delete строка (печатать больше)
0
28.01.2020, 02:16
sed -ne 's/[ ]nfin=[^ ]*/&\n/;P' < your_spice_netlist

Но вы должны иметь в виду, что списки соединений spice могут иметь экземпляры ('x') или, если на то пошло, любые границы элементов, пересекающие линии, и в таком сценарии приведенный выше код sed может не работать, поскольку, возможно, параметр nfin может находиться в начале строка типа as, + nfin = 23. Кроме того, иногда "nfin" может отображаться параметризованным, например, nfin = 'width * 0.5 + 1./nfac*len', в результате чего nfin = [0-9] не будет соответствовать.

Однако, если вы можете быть уверены, что мультилиний отсутствуют (по крайней мере, в некоторых случаях), то все вышесказанное должно работать надежно. Также не должно быть вкладок.

1
28.01.2020, 02:16

Попробуйте вместо этого sed :

sed -E 's/ pdej.*$//'

Пример:

sed -E 's/ pdej.*$//' file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2

Где file.txt содержит:

cat file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2 pdej=1.6e-07 asej=3.2e-16 lrsd=4e-08 pre_layout_local=0


ИЛИ:
Если вы хотите (нужно) использовать nfin в качестве своего рода привязки, используйте:

sed -E 's/(.*nfin=[0-9]).*/\1/' file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2
5
28.01.2020, 02:16

Теги

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