как захватить из файла строки, которые начинаются с одинарной скобки и заканчиваются одинарной скобкой

/bin/bash.inner.sh &

запускает .inner.shкак подпроцесс, но .inner.shпо-прежнему будет частью процесса .main.sh

.

но если вы хотите запустить .inner.shкак полностью отсоединенный процесс, вы можете сделать

/bin/bash.inner.sh & disown

или

nohup /bin/bash.inner.sh &

Они выполняются .inner.shкак совершенно отдельный процесс. поэтому, даже если вы ^Cиз своего .main.sh, ваш .inner.shвсе равно будет запускать (, учитывая, что вы выполняете ^Cпосле того, как интерпретатор выполнил disownилиnohup).

0
19.12.2019, 23:04
3 ответа
grep '^\[.*\]$' file
  • ^соответствует началу строки
  • \[соответствует открывающей скобке
  • .*соответствует любому символу, любому количеству (ноль или более)
  • \]соответствует закрывающей скобке
  • $соответствует концу строки
2
28.01.2020, 02:17

1 )нет необходимости cat fileпередgrep
2 )используйте более точный шаблон регулярного выражения[[^]]\+\]$

$ grep '\[[^]]\+\]$' file
[1006, 1005, 1004, 1003, 1002, 1001]
1
28.01.2020, 02:17

Исходный файл с более сложными входными данными:

$ cat file2
WATCHER::
[1006, 1005, 1004, 1003, 1002, 1001]
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
begin [20, 25, 24, 23, 22, 21] end
begin2 [30, 35, 34, 33,
 32, 31] end2
begin3 [40, 41] middle3 [50, 51, 52] end3
end of file
$

1. Простой

$ grep '\[[^]]*\]' file2
[1006, 1005, 1004, 1003, 1002, 1001]
begin [20, 25, 24, 23, 22, 21] end
begin3 [40, 41] middle3 [50, 51, 52] end3
$

2. Дополнительно

$ cat file2|grep '\[[^[]*\]'|sed 's/^[^[]*\[/[/g;s/][^]]*$/]/g;s/][^[]*\[/] [/g'
[1006, 1005, 1004, 1003, 1002, 1001]
[20, 25, 24, 23, 22, 21]
[40, 41] [50, 51, 52]
$

3. Расширенный мульти -линия

$ sed ':a;N;$!ba;s/^[^[]*\[/[/g;s/][^]]*$/]/g;s/\n//g;s/][^[]*\[/]\n[/g;' file2
[1006, 1005, 1004, 1003, 1002, 1001]
[20, 25, 24, 23, 22, 21]
[30, 35, 34, 33, 32, 31]
[40, 41]
[50, 51, 52]
$
1
28.01.2020, 02:17

Теги

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