Игнорировать строки с помощью ;/dev
.
sed '/;\/dev/{p;d}; s^/dev^;/dev^'
/;\/dev/
проверяет, имеет ли строка ;/dev
. Если он имеет ;/dev
do: p
- вывести текущую строку и d
- начать с начала.
Вы можете использовать любой символ с командой s
в sed
. Кроме того, нет необходимости в экранировании \;
, просто ;
.
Как я могу применить эту команду для каждой строки, где;пропал, отсутствует ? Я пытаюсь это
Не редактировать тот же файл, перенаправляя на тот же файл $i > $i
. Думаю об этом. Как вы можете переписать и прочитать из одного и того же файла одновременно? Вы не можете, полученный файл в большинстве случаев будет пустым, так как > $i
сначала «выполнит», и файл будет пуст, затем sed $i
запустится и прочитает пустой файл. Используйте временный файл sed ... "$i" > temp.txt; mv temp.txt "$i"
или используйте расширение gnu -i
sed
для редактирования на месте.
Что вы действительно хотите сделать:
grep -l '00/dev/' /home/xxx/xxx/xxx/*.txt |
xargs -n1 sed -i '/;\/dev/{p;d}; s^/dev^;/dev^'
grep -l
распечаткисписок файлов, которые соответствуют шаблону, затем xargs
для каждого отдельного -n1
файлов выполняет sed
, который -i
редактирует файлы на месте.