sed не удаляет все пробелы в начале каждой строки в файле - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть несколько строк кода, как показано ниже:

bash-3.2$ cat remove_space.txt
    this is firs line with 2-3 spaces
                    2nd line with more space, this is where the issue is.
          3rd line

Я могу подавить начальные пробелы в начале каждой строки, но не во 2-й строке.Я не понимаю, почему sed терпит неудачу там.

bash-3.2$ sed 's/^ *//g' remove_space.txt
this is firs line with 2-3 spaces
                2nd line with more space, this is where the issue is.
3rd line


bash-3.2$

Обновление

with `-vte` 

bash-3.2$ cat -vte remove_space.txt
    this is firs line with 2-3 spaces$
    ^I^I^I^I2nd line with more space, this is where the issue is.$
          3rd line $
$
$
bash-3.2$

Любая помощь с благодарностью.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Четыре ^I во второй строке представляют собой таблицы, это те пробельные символы, которые все еще появляются в вашем выводе.

Я предлагаю вам использовать следующую команду, чтобы удалить любые виды пробелов в началестроки:

sed 's/^[[:space:]]*//' remove_space.txt
0 голосов
/ 06 февраля 2019

Проблема здесь в том, что ваш файл содержит некоторые \t в начале строк, как показано cat -vTE (как указано в моем комментарии)

bash-3.2$ cat -vte remove_space.txt
    this is firs line with 2-3 spaces$
    ^I^I^I^I2nd line with more space, this is where the issue is.$
          3rd line $

Вы можете изменить свою команду на:

sed -E 's/^[[:space:]]+//' remove_space.txt 

, чтобы заботиться о spaces и tabs.Также по причинам переносимости используйте POSIX регулярное выражение, как определено в справке https://www.freebsd.org/cgi/man.cgi?query=sed&sektion=&n=1

 -E        Interpret regular expressions as extended (modern) regular
   expressions rather than basic regular expressions (BRE's).  The
   re_format(7) manual page fully describes both formats.
0 голосов
/ 06 февраля 2019

Вторая строка содержит символы табуляции после первых 4 пробелов - это то, что означает ^I.Вы удаляете только пробелы, а не TAB.

sed $'s/^[ \t]*//' remove_space.txt

Кстати, нет необходимости использовать модификаторы g, когда шаблон привязан с ^ или $.Эти шаблоны могут совпадать только один раз в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...