이 문자열에서
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/;.*//'