Как удалить вкладки из пустых строк с помощью sed?

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

grep -o ".*" file > a; mv a file;