2015-07-07 5 views
1

У меня есть строки и вы хотите выполнить операцию sed, в строке, которая появляется после того, как она три раза читала символ '|'. Как это сделать в Shell Script?Заменить часть строки Shell Scripting

Вход:aaaa|bbbbb|ccccc|hello

Желаемая Ouput:aaaa|bbbbb|ccccc|hel

Это будет сделано на привет, который после трех '|'

->sed 's/({.3}).*/\1/g'

ответ

1

Вы не указываете, что вы хотите сделать с последним полем для преобразования «привет» в «Хель». Вот один из способов:

sed -r 's/^(([^|]+\|){3})(...).*/\1\3/' file 
  • ([^|]+\|) обозначает поле трубы разделителями (с трубой)
  • (([^|]+\|){3}) обозначает три таких полей
    • требует СЕПГ -r вариант
    • на OSX или BSD-иш реализация седов, использование -E)
  • Я захватить следующие три символа с (...)
  • затем заменить все с первым и третьим набором захватывающих скобок
+0

Спасибо, хороший код. – RachSingla

1

Используйте cut команду вместо sed:

$ echo "aaaa|bbbbb|ccccc|hello" | cut -d '|' -f 4 
hello 
+0

Я хотел бы внести изменения в самом файле. – RachSingla