Распечатать символы из строки - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть файл, который содержит слова- abfiuf.com abdbhj.co.in abcahjkl.org.in.2 abciuf zasdg cbhjk asjk

, включая другое содержимое.Мое требование: -Слово, начинающееся с abfiuf,

abdbhj, abcahjkl, abciuf ,.... cut the two character from middle like below.
abfiuf - fi
abdbhj - db
abjcahjkl - ca
abciuf - ci

Я пробовал ниже- Сначала, чтобы найти соответствующее слово-

cat /etc/xyz.txt|grep -Eo \<(abfiuf|abdbhj|abjcahjkl|abciuf)\S*'|cut -f1 -d"."

, но не может обрезать до и после соответствия "fi "," db "," ca "," ci "из слов.

Пробовал с помощью команды sed - sed 's/^.*fi/fi/' ->, работающей только для удаления одного слова перед этим.Но как вырезать несколько символов до и после слов?

1 Ответ

0 голосов
/ 12 февраля 2019

РЕДАКТИРОВАТЬ 2: Поскольку OP сказал, что он / она хочет печатать только совпадающее значение строки, только если это так, то следует попробовать следующее.

awk 'match($0,/fi|db|ca|ci/){print substr($0,RSTART,RLENGTH)}'  Input_file

ИЛИ если вы хотите напечатать сообщение с номером строки, для которого не найдено ни одного совпадения, попробуйте следующее.

awk 'match($0,/fi|db|ca|ci/){print substr($0,RSTART,RLENGTH);next} {print "Line number " FNR " is NOT having any matching value in it."}' Input_file


Предполагая, что вам нужно напечатать только 3-й и 4-й символесли это так, попробуйте следующее.

awk '{print substr($0,3,2)}' Input_file

РЕДАКТИРОВАТЬ: Теперь я предполагаю, что вы НЕ хотите жестко кодировать позицию для печати из строкесли это так, то попробуйте выполнить следующее, которое сначала вычислит длину строки и выведет 2 символа, начиная с ее средней буквы.

awk '{len=length($0)/2;print substr($0,len,2)}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...