Используйте sed для нахождения целого слова и замены

Просто используйте литеральный символ Esc, вводимый с Ctrl-v, Esc (будет отображен как ^[ на экране):

PS1="^[[34mLinux^[[00m"

Или используйте вывод echo команда, которую Вы узнаете, работает:

PS1="$(echo -e "\033[35mLinux\033[00m")"
6
05.05.2013, 22:20
5 ответов

Это то, что Вы хотите?

$ sed 's/\(^\| \)test3\( \|$\)/\1/g' file
test3.legacy test4.legacy test3.kami

Это говорит

substitute
   (^ start of line OR space)
   test3
   (space OR end of line)
with match 1 (AKA space or start of line)

Обновление:

И, как так изящно помещено хорошим @Stephane Chazelas это не заботилось бы об определенных случаях. Также подчеркните на части мобильности. См. ответ ниже.

Вариант GNU мог, (надо надеяться), быть:

sed 's/\(^\| \)\(test3\( \|$\)\)*/\1/g'
# Or perhaps:
sed 's/\(^\| \)\(test3\( \|$\)\)\+/\1/g'

заботясь о повторяющихся соответствиях. Дополнительно можно было бы заботиться о нескольких пробелах и т.д. также. В зависимости от входа.

EOUPD


Как альтернатива, возможно (только предназначенный как начальная точка):

sed 's/\Wtest3\W/ /g'

Не это я принимаю:

$ sed 's/test3\.\?[^ ]* *//g' file
test4.legacy
6
27.01.2020, 20:24
  • 1
    Sukminder, первая команда была прекрасна!Спасибо! Вы возражали бы объяснять причину каналов (|)? –  maGz 05.05.2013, 22:31
  • 2
    Это не прекрасно относительно того, если запускаются или конец строки. Исправление. –  Runium 05.05.2013, 22:36
  • 3
    Теперь Вы просто представляете 8-) –  slm♦ 05.05.2013, 22:37
  • 4
    Обратите внимание что ни один из \|, \W или \? являются стандартными sed. Таким образом, вышеупомянутое будет работать с GNU sed, но вероятно не многие другие. –  Stéphane Chazelas 05.05.2013, 22:54
  • 5
    Первому не удалось бы удалить второе test3 в test3 test3. Второе повернулось бы x.test3.y в x y. –  Stéphane Chazelas 05.05.2013, 23:12

Я искал бы test3, перенесенный с пространством с обеих сторон, \s, учитывая Ваш пример, а не пытаются использовать граничную нотацию слова.

Например,

$ echo "test3.legacy test4.legacy test3 test3.kami" | sed 's/\stest3\s/ /g'
test3.legacy test4.legacy test3.kami

Вышеупомянутое ищет пространство test3 пространство и заменяет это просто пространством.

Примечание: Это не обработает ситуацию, где test3 является первым в списке!

3
27.01.2020, 20:24
  • 1
    Привет slm, Спасибо за ответ. Ваше решение имеет смысл и также работает. –  maGz 05.05.2013, 22:37
  • 2
    Да, @Sukminder был немного более быстрым ударом кнопки отправки, спасибо за вопрос 8-). –  slm♦ 05.05.2013, 22:38
  • 3
    Отметьте это \s расширение GNU (вдохновленный perl) и коротко для стандарта [[:space:]], нет [[:blank:]], это - это, включает все символы пространства по горизонтали и пространства по вертикали, не только вкладку и пространство. Это - также иждивенец локали. Вашему решению также не удалось бы удалить второй test3 в "x test3 test3 y" –  Stéphane Chazelas 05.05.2013, 23:07
  • 4
    @StephaneChazelas, спасибо за улучшение. Вопрос, лучше скорректировать наши ответы в таких ситуациях или оставить их и позволить комментариям взять эти нюансы? Вы исправили несколько моих ответов, которые я ценю, так как я учусь как все остальные, но я не был уверен, что состояла в том, чтобы сделать корректная вещь? –  slm♦ 05.05.2013, 23:14
  • 5
    До Вас действительно. Я не уверен, что существует некоторое согласие по этому. Можно всегда спрашивать относительно meta. Ничто неправильно в редактировании ответа, чтобы улучшиться или указать на ограничения, даже если Вы приходите к пониманию этого через комментарии других IMO. –  Stéphane Chazelas 05.05.2013, 23:27

Портативно:

sed -e 's/.*/ & /' -e :1 -e 's/ test3 / /g;t1' -e 's/^ //;s/ $//'

Это:

  • сначала добавьте пространство вначале и конец строки, для не рассмотрения test3 вначале и конец особенно,
  • замена test3 включенный в пробелы с одиночным пробелом,
  • повторите процесс, пока существуют замены (для покрытия test3 test3 случаи).
  • Удалите продвижение и конечный пробел, который мы добавили первоначально.
3
27.01.2020, 20:24

Это также работало для меня, просто удаляя слово Test3

sed 's/ test3 .//g' 
-1
27.01.2020, 20:24
sed -e 's/ test3 / /g' -e 's/ test3//g' -e 's/test3 //g' myfile.txt

Пожалуйста, попробуйте выше

-1
27.01.2020, 20:24

Теги

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