2013-06-30 2 views
0

Я хочу, чтобы вставить строкувставить двойной обратный слэш с помощью СЭД

text \\ 

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

sed -i 'text \\\\\\' $file 

дает следующее сообщение об ошибке:

sed: -e expression #1, char 57: unknown command: ` 
' 
+1

'char 57: неизвестная команда:'? Где находится остальная часть команды, которую вы используете? Почему, по-вашему, '' text \\\\\\ ''будет иметь какое-либо влияние на файл, нет команды sed для вставки, добавления, замены (или удаления) в том, что вы показываете? Удачи. – shellter

+0

Ваш пример подсказывает, что вы хотели использовать echo \\\\> файл. – devnull

ответ

2

ли что-то вроде:

sed -i 's/OLDTEXT/text \\\\/' $file

Вам нужно 4 обратные слэши при попытке добавить 2 3 для 1, 4 для 2 и т. Д.)

1

С вводом f Иль так:

apple 
orange 
grape 

Вы можете вставить text \\ перед orange, как это:

sed -i 's/^orange/text \\\\\n&/' input.txt 

Что это буквально делает матч строку, начинающуюся с orange, замените найденную строку с text \\ + а символ новой строки + согласованная строка, эффективно вставляя text \\ прямо перед линией, то есть:

apple 
text \\ 
orange 
grape 

Обратите внимание, что для получения 2 требуется 4 обратной косой черты. Я не знаю, что вы имели в виду около 3 обратных косых черт на 1, вы должны что-то пропустить.

+1

Переключатель '-ie' создает файл резервной копии, добавляющий букву' e' к имени входного файла, в вашем примере 'input.txte'. Для '-i' требуется место для модификации на месте. По крайней мере, для версии GNU. Также потому, что '-e' не является обязательным, он не жалуется. – Birei

+0

Полученный пункт, спасибо за это! – janos

1

Это может работать для вас (GNU СЭД):

sed -i '/PATTERN/i\text \\\\' file 

Это будет перезаписывать оригинал file и вставить text \\ перед строкой (ами), содержащим слово PATTERN.