2013-11-20 4 views
2

У меня есть файл (list6.txt), который выглядит следующим образом:удалить начальные пробелы с СЭД

xxxxxxx xxxxxxxxx; 

xxxxxx xxxxx PxxxxxxxxFxxxxxx xxxxxxx PxxxxxxxxFxxxxxx { 

    @Oxxxxxxx 
    xxxxxx Sxxxxx xxxNxxx() { 
     xxxxxx "Pxxxx_Pxxxxxxxx"; 
    } 

    @Oxxxxxxx 
    xxxxxx Pxxxxxxxx xxxxxxPxxxxxxxx(Cxxxxxx xxx) { 
     xxxxxx xxx Pxxxxxxxx(xxx); 
    } 

} 

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

cat list6.txt | sed 's/^[ \t]//' 
OR 
sed 's/^[ \t]*//' list6.txt 

Однако я не могу это сделать с более чем 2 командами.

Не мог бы кто-нибудь помочь мне с этим.

Благодаря

+3

Ваша вторая команда должна работать хорошо. В чем проблема? – devnull

+0

Он дает мне тот же результат, не удаляя ведущие пробелы – Rockwire

ответ

3

Используйте это более портативными СЭД:

sed -i.bak 's/^[[:space:]]*//' file 

Это работает как с гну-СЭД и BSD СЭД, как Что ж.

+0

ваша команда работает, но что не так с моей командой – Rockwire

+0

Ваша команда sed будет нормально работать в gnu-sed, но поскольку я написал, что sed на BSD-системах, таких как OSX, не поддерживает '\ t' для символа табуляции. Использование '[[: space]]' гораздо более портативно и будет работать со всеми вкусами sed в разных системах. – anubhava

+0

Так что '[[: space:]]' более переносимо, чем '\ t'. Я этого не знал, хороший! – fedorqui

1

Попробуйте это:

sed 's/^[ \t]*\(.*$\)/\1/' your.file 

Это будет соответствовать все позади ведущих пространств в соответствие группе 1. В шаблоне замены только этот матч повторного включен, но не ведущие пробелы.

+0

Это работает, но, пожалуйста, объясните, что он делает – Rockwire

+0

@ Rockwire Добавили пояснения – hek2mgl

1

Ваша команда sed в порядке, (первая отсутствует *), я думаю, вы можете захотеть, чтобы изменения были сделаны в вашем файле, так называемое «на месте».

Вам нужен параметр -i для этого (gnu sed). это выглядит так:

sed -i 'code' file 

проверить man страницу для деталей. для вашей команды, попробуйте:

sed -i 's/^[ \t]*//' list6.txt 

к сведению, что [ \t] может быть записан как \s

+1

команда 'sed -i 's/^ [\ t] * //' list6.txt' дает мне ошибку 'sed: 1:" list6.txt ": дополнительные символы в конце l command' – Rockwire

0

FreeBSD sed, которая используется на Mac OS X, необходим переключатель -e после опции -i определить & признать следующее регулярное выражение правильно & однозначно.

- sed -i 's/^[ \t]*//' list6.txt 
+ sed -i -e 's/^[ \t]*//' list6.txt 
Смежные вопросы