Это решение работает, сохраняя первые 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
Использование 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
С 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"