Как найти и удалить строку из файла в Unix? - PullRequest
3 голосов
/ 22 марта 2012

У меня есть один файл (например: test.txt), этот файл содержит несколько строк и, например, одна строка: abcd = 11 Но это может быть например: abcd = 12 Число отличается, но abcd = одинаково во всех случаях, поэтому кто-нибудь может дать мне команду найти эту строку и удалить ее?

Я пытался: sed -e \"/$abcd=/d\" /test.txt >/test.txt, но он удаляет все строки из моего файла, и я также пытался: sed -e \"/$abcd=/d\" /test.txt >/testNew.txt, но он не удаляет строки из test.txt, он только создает новый файл (testNew.txt) и в этом файле он удаляет мою строку. Но это не то, что я хочу.

Ответы [ 3 ]

9 голосов
/ 23 марта 2012

На основе вашего описания в тексте приведена очищенная версия вашего сценария sed, которая должна работать.

Предполагается, что Linux Linux GNU sed

sed -i '/abcd=/d' /test.txt 

Если выиспользуя OS-X, вам нужно

sed -i "" '/abcd=/d' /test.txt 

Если это не сработает, тогда используйте old-school sed с условным mv для управления вашими tmp-файлами.

sed '/abcd=/d' /test.txt > test.txt.$$ && /bin/mv test.txt.$$ test.txt

Примечания:

Не знаете, почему вы делаете \"/$abcd=/d\", вам не нужно экранировать " символов, если вы не делаете с этим кодом больше, чем указываете (например, с помощью eval).Просто напишите это как "/$abcd=/d".

Обычно вам не нужно '-e'

Если вы действительно хотите использовать '$ abcd, тогда вам нужно дать ему значение И каквы соответствуете строке 'abcd =', тогда вы можете сделать

 abcd='abcd='
 sed -i "/${abcd}/d" /test.txt 

Надеюсь, это поможет.

0 голосов
/ 08 октября 2013

Насколько я знаю, эту команду можно использовать для создания какого-то другого файла с удаленными строками.Теперь, когда у нас есть другой файл, мы можем переименовать этот файл и удалить исходный файл, если захотим.Вам просто нужно сделать это

       grep -v '^\$abcd=' test.txt > tmp.txt

, теперь tmp.txt будет иметь содержимое

a
b
ab
ac
$abcd
ab
a
x

Если вы хотите, вы можете переименовать его в test.txt после удаления test.txt

0 голосов
/ 22 марта 2012

Вот решение с использованием grep:

$ grep -v '^\$abcd=' test.txt

Подтверждение концепции:

$ cat test.txt
a
b
ab
ac
$abcd=1
$abcd=2
$abcd
ab
a
$abcd=3
x

$ grep -v '^\$abcd=' test.txt
a
b
ab
ac
$abcd
ab
a
x
...