Я нашел ответ на свой вопрос здесь: команда "sed" для удаления строки, которая точно соответствует строке первого слова
... но только частично, потому чтоРешение работает, только если я запрашиваю почти так же, как отвечал ответивший.
Они ответили:
sed -i "/^maria\b/Id" file.txt
... чтобы вырезать только строку, начинающуюся со слова "Мария" внапример, это не Мария, если это не первое слово.
Я хочу выделить конкретный URL в файле, например: "cnn.com", но у меня также есть несколько адресов локальных хостов., 0.0.0.0 и оба имеют некоторые с одним пробелом впереди.Я также не хочу разбивать субдомены, такие как ads.cnn.com, чтобы код «работал», но не работает, когда я добавляю больше команд с опцией -e.Мой код, приведенный ниже, похоже, хорошо очищает вещи, за исключением того, что я не могу заставить его взломать cnn.com!Мой файл называется raw.txt
sed -r -e 's/^127.0.0.1//' -e 's/^ 127.0.0.1//' -e 's/^0.0.0.0//' -e 's/^ 0.0.0.0//' -e '/#/d' -e '/^cnn.com\b/d' -e '/::/d' raw.txt | sort | tr -d "[:blank:]" | awk '!seen[$0]++' | grep cnn.com
Когда я запускаю grep для cnn.com, я вижу, что все cnn включают в себя тот, который мне не нужен, который на самом деле является "cnn.com".
ads.cnn.com
cl.cnn.com
cnn.com <-- the one I don't want
cnn.dyn.cnn.com
customad.cnn.com
gdyn.cnn.com
jfcnn.com
kermit.macnn.com
metrics.cnn.com
projectcnn.com
smetrics.cnn.com
tiads.sportsillustrated.cnn.com
trumpincnn.com
victory.cnn.com
xcnn.com
Если я просто использую этот фрагмент кода с cnn.com, он, похоже, сработает.
sed -r '/^cnn.com\b/d' raw.txt | grep cnn.com
* I'm not using the "-e" option
Результат:
ads.cnn.com
cl.cnn.com
cnn.dyn.cnn.com
customad.cnn.com
gdyn.cnn.com
jfcnn.com
kermit.macnn.com
metrics.cnn.com
projectcnn.com
smetrics.cnn.com
tiads.sportsillustrated.cnn.com
trumpincnn.com
victory.cnn.com
xcnn.com
Мне кажется, что ничего не происходитработать, когда я строю команды вместе с опцией "-e".Мне нужна помощь в получении команды с несколькими опциями при помощи SED.
Любой совет?
Ubuntu 12 LTS и 16 LTS.
sed (GNU sed) 4.2.2