Sed --- 일치하는 줄의 문자를 바꾸시겠습니까?

Sed --- 일치하는 줄의 문자를 바꾸시겠습니까?

다음과 같은 줄이 포함된 파일에서:

# lorem ipsum blah variable

#특정 문자열이 포함된 같은 줄에서 문자를 제자리에서 제거(주석) 하고 싶습니다 . sed이것에 어떤 이점이 있습니까?

이 조건을 작동시키려고 노력 중입니다. 이 작업을 수행하는 "서투른" 방법이 있습니다. awkor를 사용하여 일치하는 줄 번호를 찾은 sed다음 해당 번호를 별도의 sed명령에 사용할 수 있지만 이 작업을 수행하는 더 좋은 방법이 있다고 확신합니다.

답변1

작업하려는 행에 대한 선택기로 찾고 있는 문자열을 사용하십시오.

sed '/ipsum/s/#//g'

/ipsum/"ipsum"이 포함된 줄을 선택하고 이 줄에서만 다음 명령을 실행합니다. 중괄호를 사용하여 더 많은 명령을 실행할 수 있습니다

/ipsum/{s/#//g;s/@/-at-/g;}

답변2

$ cat input.txt
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
# lorem ipsum blue variable

그 다음에:

$ sed 's|# \(.*blue.*\)|\1|' input.txt

다음을 제공합니다:

# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
lorem ipsum blue variable

작동 방식은 다음과 같습니다.

정규식이 찾은 것을 대체해야 한다고 s알려 줍니다 .sed

패턴은 # \(.*blue.*\)다음과 같이 분류됩니다. 해시와 공백을 찾습니다. 대괄호( \()는 그룹화를 시작합니다. 앞에 오는 .*blue.*단어 blue이고 뒤에 오는 단어입니다. 다음 괄호( \))는 그룹화를 종료합니다.

대체는 \1첫 번째 그룹화 괄호의 내용에 대한 역참조입니다.

답변3

POSIX 도구를 사용할 수 있습니다 ex.

ex a.txt <<eof
/Sunday/ sub/Sun//
xit
eof

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html

답변4

다음과 같이 이 작업을 수행할 수 있습니다.

sed '/ipsum/s/^# //g'

주석이 포함된 모든 줄을 일치시키고 ipsum줄 시작 부분에서 주석을 제거합니다. ^줄의 시작 부분과 일치하고 $줄의 끝 부분과 일치합니다. 명령의 나머지 부분은 sed 's/find/replace/g'파일을 편집하기 위해 호출할 수 있는 구문을 사용합니다 sed -i '/ipsum/s/^# //g' file.

다음과 같이 이 프로세스를 되돌릴 수 있습니다.

sed '/ipsum/s/^/# /g'

포함된 각 줄의 시작 부분에 설명이 추가됩니다 ipsum.

관련 정보