Найти строку и заменить подстрокой

Думаю, вам следует изучить / proc / mounts :

$ cat /proc/mounts

Этот файл содержит точное устройство, файловую систему и другие параметры монтирования. используется для монтирования различных файловых систем в вашей ОС. Формат такой же, как в / etc / fstab .

-1
19.01.2019, 17:56
2 ответа

Я предполагаю, что эти пары персонажей после STATEнаходятся в капитале. Если нет, то вы должны заменить[A-Z][A-Za-z].

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

sed -Ei 's/^\$\$STATE=([A-Z]{2}) ([A-Z]{2})/\$\$STATE=\1/g' sed_file

Он будет соответствовать строкам, начинающимся с $$, например $$STATE=AB CD, и заменит их на $$STATEи первое подвыражение \1.

Редактировать :Если вам нужна дополнительная одинарная кавычка, используйте:

sed -Ei 's/^\$\$STATE=([A-Z]{2}) ([A-Z]{2})/\$\$STATE='"'"'\1'"'"'/g' sed_file
3
28.01.2020, 05:07
awk 'BEGIN { FS=OFS="=" } $1 == "$$STATE" { split($2,a," "); $2 = "'"'"'" a[1] "'"'"'" } 1' file

Это использует awkдля разбора файла как набора полей с разделителями =-.Если первое поле представляет собой точную строку $$STATE, то второе поле разбивается на пробелы и ему присваивается значение его первого бита, разделенного пробелом -, с одинарными кавычками вокруг него.

Причудливый вид "'"'"'"— это одинарная кавычка с двойными кавычками внутри скрипта awkс одинарными кавычками.

Результатом будет

$$BATCHCTRL=TEST-012017
$$STATE='CA'
$$FROM_DATE=01/10/2017
$$TO_DATE=01/30/2017

В качестве альтернативы с помощьюsed:

sed -E '/^\$\$STATE=/s/=([^ ]*).*/='"'"'\1'"'"'/' file

Это найдет любую строку, начинающуюся со строки $$STATE=, а затем заменит все после =первым битом перед пробелом, снова вставив одинарные кавычки.

1
28.01.2020, 05:07

Теги

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