2013-10-20 6 views
1

У меня есть файл (sample1.txt) следующего вида:команда линукс заменить указанный контент в конце строки

1 a 
2 b\ 
3 d 
4 e\ 
5 k 
6 hello\hi 
7 stackoverflow\site\ 

Теперь, если последний символ строки является «\», то я хотите, чтобы заменить его «», таким образом, чтобы преобразовать sample1.txt в следующий файл:

1 a 
2 b 
3 d 
4 e 
5 k 
6 hello\hi 
7 stackoverflow\site 

Я знаю, что это можно сделать то же самое с использованием языка программирования, но это можно сделать то же самое с помощью команда linux (например, grep, sed и т. д.)

ответ

3

Попытка:

cat sample1.txt | sed 's/\\$//' 
+0

Не могли бы вы объяснить, что делает sed в команде немного. Я имею в виду, что я не могу понять, что делать/\\ $ // 'stand for –

+1

Извините - это может быть немного загадочно. «\\» соответствует одиночному обратному косую черту в тексте ввода (его нужно удвоить, так как обратная косая черта имеет особое значение = например, «\ t» - вкладка). «$» - это шаблон для распознавания конца строки, поэтому «\\ $» соответствует «Обратная косая черта в конце строки». Итак, вся вещь «s/\\ $ //» означает «заменить обратную косую черту в конце строки ничем». – racraman

+0

@racraman выглядит так, как будто вы попали в нее первым. – MattSizzle

1

С Sed вы можете сделать следующее:

sed -i 's/\\$//' samples.txt 

s начнет замену. // это то, что соответствует. В этом случае первый \ является таким вторым, который вы хотите заменить, используется буквально, а не как часть команды sed \ = совпадение a \ while \ alone означает нечто совершенно другое. $ означает поиск первого экземпляра с конца строки, чтобы вы не соответствовали любому другому «\» в строке.

// это конец первого совпадения шаблонов и начало заменяемого текста, поэтому, если вы, где делать/протестировать/в конце файла, будут заменены тестом, а результат будет выглядеть чем-то как

sed -e 's/\\$/test/' sample.txt 
1 a 
2 btest 
3 d 
4 etest 
5 k 
6 hello\hi 
7 stackoverflow\sitetest 

Ключ -i в SED команды будет делать инлайн заменить так модифицирует файл и не печатает STDOUT

-i[SUFFIX], --in-place[=SUFFIX] 
       edit files in place (makes backup if extension supplied) 

Дополнительное чтение на sed. Надеюсь это поможет.

0

Просьба проверить с,

# cat checkin.sh 
root/ 
postfix/ 
root/ 
postfix/ 

# sed -i 's/\/$//g' checkin.sh ----> to remove last/in file. 

# cat checkin.sh 
root 
postfix 
root 
postfix 

# sed -i 's/$/\//g' checkin.sh -----> to add/in every line's end. 

# cat checkin.sh 
root/ 
postfix/ 
root/ 
postfix/ 

Спасибо.

Смежные вопросы