Как распечатать все за спичкой? - PullRequest
0 голосов
/ 12 июня 2019

Мне нужно напечатать все за спичкой.В этом случае это ''.

Пробовал с использованием awk, sed и grep.Каждый раз, когда он просто печатал все перед матчем.

Comments (){
        line=$1
        comment=$(echo $line | sed -n 's/ //p')
        echo $comment
}

Comment="$(Comments $line)"

Ввод выглядит как:

name.surname@email.com;KF-2514 WE NEED TO TALK A LOT

Выход должен выглядеть так:

WE NEED TO TALK A LOT

Спасибо запомощь.

Ответы [ 4 ]

1 голос
/ 12 июня 2019

Вы можете просто использовать расширение параметра, например.

echo ${line#* }

, удалив до первого пробела перед строкой.

0 голосов
/ 12 июня 2019

при звонке

Comment="$(Comments $line)"

и строка равна

name.surname@email.com;KF-2514 WE NEED TO TALK A LOT

$1 внутри функции установлено на name.surname@email.com;KF-2514, и это то, что вы обрабатываете. Правильный способ вызова функции -

Comment=$(Comments "$line")

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

0 голосов
/ 12 июня 2019

Проблема, вероятно, в пробеле - код line=$1 установил бы $line в "name.surname@email.com; KF-2514" .Таким образом, sed не увидит пробела и, следовательно, не напечатает ничего.

Попробуйте изменить $1 на $@, потеряв ненужные переменные, плюс измените sed немного код:

Comments (){  echo "$@" | sed -n 's/^[^ ]* //p') ; }

Comments 'name.surname@email.com;KF-2514 WE NEED TO TALK A LOT' 

Вывод:

WE NEED TO TALK A LOT

Чтобы использовать вышеуказанную функцию для файла с именем foo , попробуйте:

while read x; do Comments "$x" ; done < foo

Но если файл был входным, было бы проще использовать sed без какой-либо функции-оболочки:

sed -n 's/^[^ ]* //p' foo
0 голосов
/ 12 июня 2019

Использование grep с PCRE:

echo "$line"| grep -oP '\s\K.*'
WE NEED TO TALK A LOT

Использование awk:

echo "$line" |awk '{$1=""}1'
 WE NEED TO TALK A LOT

Использование sed:

echo "$line" |sed -r 's/^[^ ]+//g'
 WE NEED TO TALK A LOT

Или sed без -r флаг:

echo "$line" |sed  's/^[^ ]\+//g'
 WE NEED TO TALK A LOT

Возможно, вы захотите запустить свою функцию следующим образом:

comments(){
    input="$1"
    echo "$input"|grep -oP '\s\K.*'

    }

    #pass the input line here
    comments "name.surname@email.com;KF-2514 WE NEED TO TALK A LOT"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...