sed :поиск и печать только совпадающих шаблонов

Попробуйтеprename

$ ls
P [001]  P [002]  P [003]
$ prename 's/[ \[\]]//g' P\ *
$ ls
P001  P002  P003
$

В качестве альтернативы можно использовать исходный сценарий (с небольшим изменением 'на "и небольшим изменением регулярного выражения)

$ ls
P [001]  P [002]  P [003]
$ for P in *\ *; do mv "$P" "${P//[\[\] ]/}" ; done
$ ls
P001  P002  P003
$
1
31.05.2021, 09:48
1 ответ

Из комментариев я понял, что у вас действительно есть такой файл:

[main] [INFO] Building bar 1.0.0-SNAPSHOT
... Building........
[main] [INFO] -------------< org.maven.plugins.junt:parent >-------------
[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
... Building........
Exception units:
 <failed units>
 <failed units>

[main] [INFO] Building foo 1.0.0-SNAPSHOT
... Building........

И только если есть строка Exception units:, вы хотите, чтобы эти строки печатались до пустой строки, но предварялись последней строкой [main] [INFO] Building, чтобы вы знали, к какому модулю относятся сообщения. Остальные [main] [INFO] Buildingбез исключений печатать не надо?

В таких случаях вы сохраняете каждую [main] [INFO] Buildingстроку в ячейке хранения с помощью h, чтобы при необходимости можно было вызвать ее:

sed -ne '/\[main] \[INFO] Building/h;/Exception units:/{x;p;x;}' -e '//,/^$/p'

Если строка Exception units:найдена, пробелы e xзаменяются, сохраненная строка Buildingзаменяется pи пробелы e xзаменяются обратно. Наконец, все строки до пустой строки pнапечатаны (пустой шаблон //соответствует последнему шаблону, поэтому нам не нужно его повторять ). Вывод:

[main] [INFO] Building junt-parent 1.0.0-SNAPSHOT 
Exception units:
 <failed units>
 <failed units>

Если это не то, чего ты хочешь,пожалуйста, приведите пример из реального мира.

2
28.07.2021, 11:28

Теги

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