2016-08-12 9 views
-2

Содержимое файла a.txt является:Баш: Удалите определенный шаблон символов из строки

10.39.105.16tcp(1234) ABCDEF02 
10.49.105.13tcp(521) ABCDEFV01 
10.19.105.12tcp(1241) ABCDEFV01 
10.29.105.20tcp(1222) ABCDEF03 
10.39.104.9tcp(131)  ABCDEF21 
10.49.104.34tcp(1512) ABCDEF22 
10.89.104.120tcp(1384) ABCDEF32  

Как достичь следующий вывод:

10.39.105.10 ABCDEF02 
10.49.105.13 ABCDEFV01 
10.19.105.13 ABCDEFV01 
10.29.105.20 ABCDEF03 
10.39.104.1 ABCDEF21 
10.49.104.2 ABCDEF22 
10.89.104.130 ABCDEF32 

Как удалить шаблон tcp (*) в каждой строке вышеуказанного файла?

+0

cat a.txt | cut -d $ '\ t' -f1 | cut -d $ 't' -f1> 1 и cat a.txt | cut -d $ '\ t' -f2> 2 и paste -d $ "\ t" 1 2 .. Это сработало, но мне было просто интересно получить его в одиночной команде. – Srikanth

+2

В вашем примере изменились и последние номера перед tcp, что правильно? –

ответ

1

Вы можете использовать СЭД:

sed 's/tcp([0-9]\+)\s\+/ /' a.txt 

Это будет также избавиться от ведомого пространства после ТСРА (*) и заменить его одним пробел, как он появляется в вашем выводе.

Чтобы изменить действительный файл (а не только выход), добавьте опцию -i для INPLACE:

sed -i 's/tcp([0-9]\+)\s\+/ /' a.txt 
+1

Я ясно упомянул о своей попытке ответить на ваш комментарий. Ты можешь видеть. – Srikanth

1

В зависимости от того, что вы пытаетесь достичь, это может быть ответом:

awk '{sub(/tcp(.+)/,"",$1)}1' file 

    10.39.105.16 ABCDEF02 
    10.49.105.13 ABCDEFV01 
    10.19.105.12 ABCDEFV01 
    10.29.105.20 ABCDEF03 
    10.39.104.9 ABCDEF21 
    10.49.104.34 ABCDEF22 
    10.89.104.120 ABCDEF32 
Смежные вопросы