문자열 일치 인스턴스를 찾거나 바꾸는 스크립트를 만들려고 합니다.
vc/integer
/etc/securetty 파일에는 다음 문자열이 포함되어 있습니다.
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
grep -E 'vc/(\d{0,4}\D)*' /etc/securetty | while read line; do sed -ie "s=$line==g" /etc/securetty; done
예상대로 위 명령은 언급된 모든 문자열을 제거했지만 마지막 두 문자열 vc/1의 일부인 두 번째 숫자 0과 1은 제거하지 않았습니다.0VC/11. 다음 내용이 포함된 파일이 남았습니다.
0
1
한 자리 및 두 자리 일치 항목을 제거하도록 명령을 수정하려면 어떻게 해야 합니까?
답변1
그냥 이렇게 해보는 게 어때?
sed -i -e 's|vc/[0-9]\{1,\}||g' /etc/security
설명하다:
= regex
[0-9]\{1,\}
> 1개 이상의 이전 원자와 일치합니다. 귀하의 경우에는 정확히 입니다 [0-9]
. \d+
내가 제공한 것과 동일하지만 POSIX [0-9]\{1,\}
sed와 호환되지 않습니다. 다시 [0-9]\{0,\}
한 번 말하지만 \d*
.