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

С GNUsed:

sed 's|\s*// characteristic_comment_to_delete.*||;T;/./!d'

T— это расширение GNU, которое ответвляется , если предыдущая замена sне была успешной. Поэтому, если ни один комментарий не был удален, мы разветвляемся, и следующий /./!d(, который удаляет строку, если она не содержит хотя бы один символ ), пропускается.

Стандартный эквивалент:

sed '\/[[:space:]]*\/\/ characteristic_comment_to_delete.*/{s///;/./!d;}'

Или:

sed 's|[[:space:]]*// characteristic_comment_to_delete.*||
     t 1
     b
     :1
     /./!d'

Оба подавляют пустые строки, только если замена прошла успешно.

0
13.07.2020, 22:04
2 ответа

Пусть файл, в котором находятся ваши данные, будет input.txt

Используйте следующую команду для замены текста с помощью регулярных выражений. посетите($ man sed)для получения дополнительной информации

$ sed 's/^\.//' input.txt

Это выведет результат на вывод терминала.

При желании вы можете перенаправить вывод в файл, используя

$ sed 's/^\.//' input.txt > output.txt
0
18.03.2021, 23:19

Это зависит от того, что вы подразумеваете под «в bash» -это просто сделать в sedили подобных текстовых редакторах на основе регулярных выражений -:

$ sed 's/^[.]//' example
test.example.com
123.example.com
999.example.com
asd.example.com
1.1.example.com

Квадратные скобки вокруг точки препятствуют тому, чтобы она имела голую интерпретацию регулярного выражения (, которая удалит любой одиночный начальный символ)-вы также можете использовать обратную косую черту s/^\.//, чтобы сделать ее буквальной.

2
18.03.2021, 23:19

Теги

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