Думаю, вам следует изучить / proc / mounts
:
$ cat /proc/mounts
Этот файл содержит точное устройство, файловую систему и другие параметры монтирования. используется для монтирования различных файловых систем в вашей ОС. Формат такой же, как в / etc / fstab
.
Я предполагаю, что эти пары персонажей после 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
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=
, а затем заменит все после =
первым битом перед пробелом, снова вставив одинарные кавычки.