나는 그것에 대해 많은 질문이 있다는 것을 알고 있지만 그것을 작동시킬 수는 없습니다.
그룹(예: )을 사용하거나 삭제하고 싶습니다 root
. 그래서 나중에 다 삭제해야 해요/etc/group
sed
awk
root:*:0:
나는 다음을 사용하여 그것을 제거하려고 시도했습니다.
cat /etc/group | awk '!p;/^root:*:0:/{p=1}'
그리고
cat /etc/group | sed 's/root\:\*\:0\:.*//'
그러나 sed
전체 root
줄을 삭제하십시오.
내가 뭘 잘못했나요?
답변1
sed와 함께 주소를 사용하여 작업할 라인을 제한할 수 있습니다.
sed '/^root:/s/:[^:]*$/:/' /etc/group
로 시작하는 줄의 경우 root:
줄의 마지막 문자 이후의 모든 문자가 삭제됩니다 :
.
( /etc/group
레코드에는 :
구분 열이 4개만 있으므로 마지막 열과 그 안의 모든 그룹 구성원이 제거됩니다.)
답변2
그리고 awk
:
awk 'BEGIN{OFS=FS=":"} $1=="root"{$NF=""} 1' /etc/group
필드를 분할하고 :
첫 번째 필드가 인 경우 마지막 필드를 빈 문자열로 설정합니다 root
.
답변3
이것이 실제로 간단한 텍스트 처리 도구를 사용하여 수행되어야 하는지에 대한 질문과는 별개로, sed
"replace" 명령이 다음을 대체하기 때문에 호출하면 전체 줄이 지워집니다.전체대체 패턴을 찾습니다(귀하의 경우 빈 문자열).
라인 작업을 위한 최소한의 수정 sed
은 다음과 같습니다.
sed 's/root:\*:0:.*/root:*:0:/' /etc/group
또는 캡처 그룹을 사용하십시오.
sed 's/\(root:\*:0:\).*/\1/' /etc/group
(그런데 cat
이는 파일을 명령줄 인수로 제공하거나 사용하는 경우에는 필요하지 않습니다.)sed
awk
그러나 @Shawn이 제안한 솔루션은 이와 관련하여 더 우아합니다.