Как я могу заменить текст после определенного слова с помощью sed?

sudo -u rswrk96 -i killall ... должен совпасть с выполнением su - rswrk96 и затем killall ....

То, что оставляют, генерирует последовательность 00-96. Это должно работать:

for i in $(seq -w 00 96); do sudo -u rswrk$i -i killall ...; done

Теперь, когда я думаю о нем, Вы могли, вероятно, просто сделать

for i in $(seq -w 00 96); do sudo killall -u rswrk$i; done

Не должны входить в систему.

10
05.03.2013, 01:03
3 ответа

Ищите строку, которая запускается с projdir, и замените целую строку новой:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^ и $ beginning/end-of-line маркеры, таким образом, шаблон будет соответствовать целой строке; .* соответствия что-либо. -i говорит sed записать изменения непосредственно в .ignore, вместо того, чтобы просто произвести их

16
27.01.2020, 20:00

Один подход должен переписать всю строку, с помощью обратных ссылок для частей, которые Вы хотите сохранить:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

Другой подход должен переписать ту часть строки, но только если некоторая другая часть соответствует:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Оба примера переписывают второе разграниченное пробелом слово на строках, где первое слово projdir.

4
27.01.2020, 20:00
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir - найти строку, которая начинается со строки projdir. . * $ Там означает строку после projdir в строке в той же строке. Строка projdir PacMan - это строка, которой мы заменяем. g для global - для замены всех таких строк, начинающихся с projdir. . ignore - это имя файла

1
27.01.2020, 20:00

Теги

Похожие вопросы