sed -заменить значение, чтобы использовать кавычки там, где это необходимо

Это решение работает, сохраняя первые 3 строки в /tmp/first, сохраняя остальную часть файла в /tmp/last, сохраняя вывод myScript.shв /tmp/middle, затем catобъединяя их вместе и перезаписывая. оригинал/tmp/file:

file=/tmp/file
sed -n '1p;2p;3p' "${file}" >/tmp/first
sed '1d;2d;3d' "${file}" >/tmp/last
./myScript.sh >/tmp/middle
cat /tmp/first /tmp/middle /tmp/last >/tmp/file
3
21.09.2020, 14:15
2 ответа

Использование Raku (, ранее известного как Perl6)

Джентльмен по имени Ларри Уолл разместил этот изящный совет по цитированию в списке рассылки «perl6 -users» (perl6 -users@perl.org ). См. Совет #8 по ссылке NNTP ниже :

.
~$ env re="\'" raku -ne 'say $0 if m/ <?after value\:\s >  \"? <{ %*ENV<re> }>?  (.+?) \"? <{ %*ENV<re> }>? $$ /;'  jinja.txt
「/bin/echo」
「Hello World」
「PATH」

Приведенный выше код показывает правильное совпадение. Итак, все, что нужно, это запустить приведенный ниже код:

~$ env re="\'" raku -pe 's/ <?after value\:\s >  \"? <{ %*ENV<re> }>?  (.+?) \"? <{ %*ENV<re> }>? $$ /"{$0}"/;'  jinja.txt
- param:
  name: Command
  type: String
  value: "/bin/echo"
- param:
  name: Args
  type: String
  value: "Hello World"
- param:
  name: Something
  type: EnvVar
  value: "PATH"

Хотите сделать побег более читабельным? Не хотите играть с переменными ENV, как указано выше? Затем просто произнесите свои цитирующие символы (также из совета Ларри Уолла #8 по ссылке NNTP ниже):

~$ raku -ne 'say $0 if m/ <?after value\:\s >  \c[QUOTATION MARK]? \c[APOSTROPHE]?  (.+?)  \c[APOSTROPHE]? \c[QUOTATION MARK]? $$ /;'  jinja.txt
「/bin/echo」
「Hello World」
「PATH」

~$ raku -pe 's/ <?after value\:\s >  \c[QUOTATION MARK]? \c[APOSTROPHE]?  (.+?)  \c[APOSTROPHE]? \c[QUOTATION MARK]? $$ /"{$0}"/;'  jinja.txt
- param:
  name: Command
  type: String
  value: "/bin/echo"
- param:
  name: Args
  type: String
  value: "Hello World"
- param:
  name: Something
  type: EnvVar
  value: "PATH"

ХТН.

https://raku.org/
https://www.nntp.perl.org/group/perl.perl6.users/2020/07/msg9004.html

0
18.03.2021, 23:03

С GNU awk для соответствия третьего аргумента ()и gensub():

$ awk 'match($0,/(\s*value:\s*)(.*)/,a){$0=a[1] "\"" gensub(/[\047"]/,"","g",a[2]) "\""} 1' file
- param:
  name: Command
  type: String
  value: "/bin/echo"
- param:
  name: Args
  type: String
  value: "Hello World"
- param:
  name: Something
  type: EnvVar
  value: "PATH"

иначе Использование любого awk:

$ awk '/value:/{hd=$0; sub(/:.*/,": ",hd); gsub(/[^:]*: *[\047"]?|[\047"]$/,"");  $0=hd "\"" $0 "\""} 1' file
- param:
  name: Command
  type: String
  value: "/bin/echo"
- param:
  name: Args
  type: String
  value: "Hello World"
- param:
  name: Something
  type: EnvVar
  value: "PATH"
3
18.03.2021, 23:03

Теги

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