Как убрать вкладки из пустых строк с помощью sed? - PullRequest
12 голосов
/ 26 сентября 2011

Я бы хотел использовать sed для удаления вкладок из пустых строк.Например, строка, содержащая только \t\n, должна измениться на \n. Какой синтаксис для этого?

Ответы [ 5 ]

24 голосов
/ 26 сентября 2011

sed не знает о escape-последовательностях типа \t. Таким образом, вам придется буквально набрать tab на вашей консоли:

sed 's/^    *$//g' <filename>

Если вы используете bash, вы не можете набрать tab на консоли. Вам нужно будет сделать ^V и затем нажать tab. (Ctrl-V, а затем tab), чтобы распечатать буквенную вкладку.

2 голосов
/ 26 сентября 2011

Чтобы заменить произвольные строки пробелов пустой строкой, используйте

sed -r 's/^\s+$//'

Флаг -r говорит, что следует использовать расширенные регулярные выражения, а шаблон ^ \ s + $ сопоставляет все строки с некоторыми пробелами, но не с другимисимволы.

1 голос
/ 26 сентября 2011

Другое опубликованное решение будет работать, если в строке есть 1 (и только 1) вкладка. Обратите внимание, что Raze2dust указывает, что sed требует, чтобы вы набрали буквальную вкладку. Альтернатива:

sed '/[^      ]/!s/   //g' file-name.txt

Что заменяет вкладки в строках, которые имеют только вкладки. Инвертированный класс соответствует строкам, которые содержат что-либо, что мешает вкладке - следующее '!' приводит к тому, что он не совпадает с этими строками, то есть только со строками, имеющими только вкладки Затем подстановка выполняется только на этих строках, удаляя все вкладки.

0 голосов
/ 21 апреля 2014

Я заметил, что \ t не распознается UNIX.Как говорится, используйте актуальный ключ.В приведенном ниже коде TAB представляет собой нажатие клавиши табуляции.

$ sed 's / TAB // g' oldfile> newfile

Дружественный совет: чтобы убедиться, что в файле есть вкладки, которые вы пытаетесь удалить, используйте следующий код, чтобы увидеть,\ t появляется

$ od -c имя файла

0 голосов
/ 28 декабря 2013
grep -o ".*" file > a; mv a file;
...