Я бы хотел использовать sed для удаления вкладок из пустых строк. Например, строка, содержащая только \t\n
должна измениться на \n
. Какой синтаксис для этого?
Как удалить вкладки из пустых строк с помощью sed?
Ответ 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;