Попробуйте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
$
Из комментариев я понял, что у вас действительно есть такой файл:
[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>
Если это не то, чего ты хочешь,пожалуйста, приведите пример из реального мира.