как выполнить автоматическую установку полосы пропускания в Ubuntu 20.04

Проблема в выражении .*в вашем выражении, которое является "жадным". Это заставляет ваше выражение соответствовать ]и остальной части строки до последнего ]в строке. Вместо этого сделайте так, чтобы эта часть выражения совпадала только с тем, что, как вы сами сказали, может совпадать, то есть с любыми буквенно-цифровыми и -. Буквенно-цифровой символ сопоставляется с [[:alnum:]], а [[:alnum:]-]позволяет выражению в квадратных скобках также соответствовать тире :

.
\[\^mean-[[:alnum:]-]*\]

Выполнение этого на данных в вашем вопросе:

$ grep -o '\[\^mean-[[:alnum:]-]*\]' file
[^mean-vicissitudes]
[^mean-immortality]
[^mean-ingot]
[^mean-remonstrance]
[^mean-libeller]
[^mean-debauched]
[^mean-amorous]
[^mean-turpitude]
[^mean-debauched]
[^mean-licentious]
[^mean-frivolous]
[^mean-despots]
[^mean-repentance]
[^mean-ignominy]
[^mean-vain]
[^mean-presumptuousness]
[^mean-haughtiness]

Ваша команда grep, очевидно, извлечет совпадения, но не удалит их. Для этого используйте sedскрипт редактирования:

$ sed 's/\[\^mean-[[:alnum:]-]*\]//g' file





 and the most amorous

 drunken, licentious,





 haughtiness,

Добавьте к этому некоторое удаление пустых строк и начальных пробелов,

$ sed 's/\[\^mean-[[:alnum:]-]*\]//g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//' file
and the most amorous
drunken, licentious,
haughtiness,

Или, чтобы изменить только те строки, на которых есть [^mean-...],

sed '/\[\^mean-[[:alnum:]-]*\]/{ s///g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//; }' file
2
05.08.2021, 19:46
0 ответов

Теги

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