sed, awk 또는 grep을 사용하여 문자열의 첫 번째 동적 발생을 가져옵니다.

sed, awk 또는 grep을 사용하여 문자열의 첫 번째 동적 발생을 가져옵니다.

이 문자열에서

Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)

"...apache2.service;" 이후에 "활성화" 또는 "비활성화"할 수 있는 첫 번째 항목을 가져오고 셸에서 인쇄하고 싶습니다.

grep, sed 또는 awk를 사용하여 어떻게 얻나요?

답변1

사용SED:

echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | sed -n 's/.*service; \([^;]*\).*/\1/p'

사용grep:

echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | grep -o -P '(?<=service; ).*(?=;)'

사용AWK:

echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | awk -F 'service; |;' '{print $2}'
  • service;와 사이의 문자열을 인쇄합니다.;

답변2

당신은 그것을 사용할 수 있습니다awk

 echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | awk '{print $4}'

또는awk

echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | awk -v RS=" " '/service/{getline;print "",$0}' | tr -d ";"

또는cut

echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | cut -d';' -f 2

또는 두 세미콜론 사이에서 sed추출disable

 echo "Loaded: loaded (/lib/systemd/system/<name>.service; disabled; vendor preset: enabled)" | sed 's/^[^;]*;//; s/;.*//'

관련 정보