파일의 특정 줄을 검색하고 바꾸려고 하는데 실행 시 sed
해당 정규식이 일치하지 않으면 상태 코드가 반환되지 않으므로 sed
조건을 추가하는 대신 grep
Enter 메서드가 있습니다 sed
. sed
종료 상태?
질문:
답변1
sed
하다반환 종료 상태:
$ echo "foo" | sed 's/xx/yy/'
foo
$ echo $?
0
$ sed 's/xx/yy/' foo.txt
sed: can't read foo.txt: No such file or directory
$ echo $?
2
Sed의 종료 코드는 프로그램이 성공적으로 종료되었는지 여부와 관련이 있으며 수행 중인 작업의 내부와는 관련이 없으며 sed
명령이 성공적으로 실행되었는지 여부만 관련됩니다.
즉, GNU sed는 이를 수행하는 방법을 제공합니다:
q [exit-code]
Immediately quit the sed script without pro‐
cessing any more input, except that if auto-
print is not disabled the current pattern
space will be printed. The exit code argument
is a GNU extension.
예를 들어 (에서 가져옴여기):
$ echo "foo"|sed '/foo/ s/f/b/;q'
boo
$ echo $?
0
$ echo "trash"|sed '/foo/{s/f/b/;q}; /foo/!{q100}'
trash
$ echo $?
100
다음 사실을 신고하고 싶으신 경우어느입력의 모든 라인에서 교체가 성공했습니다. 예약된 공간에 성공적인 교체를 표시하고 마지막 라인에서 확인할 수 있습니다.
seq 6 | sed 's/4/four/;s/5/five/; tm;${x;/1/{x;q};x;q1};b;:m;x;s/.*/1/;x'
tm
m
교체가 성공하면 레이블로 분기합니다. 여기에 1
마지막 행에서 찾는 예약된 공간을 넣습니다 .
답변2
첫째, 모든 명령(포함 sed
)은 종료 상태를 반환합니다. 당신은 내가 실패를 반환하지 않는 이유를 찾고 있습니다. 이는 두 번째 요점으로 이어진다.
이와 같은 프로그램은 sed
술어가 아니라 편집자입니다. 그들의 목적은 프로그램을 통해 흐르는 데이터를 변경하는 것입니다. 오류 조건은 잘못된 내부 명령이나 명령줄에 존재하지 않는 파일과 같은 상황을 나타냅니다.
어떤 논리를 원하는지 잘 모르겠습니다. 예상되는 출력이 포함되어 있지 않습니다. 하지만 찾고 있는 것이 다음과 같을 수도 있습니다.
$ sed '/^test line 7/s//#test line 7/;/^#test line 7/s//& \nAppend New Line/' test.txt
test line 1
test line 2
test line 3
test line 4
test line 5
test line 6
#test line 7
Append New Line
b
와 같이 이를 처리하는 다른 구조도 있습니다 sed
.
실제 반환 코드를 찾을 수 없는 경우 gawk
해당 exit
선언을 살펴보는 것이 좋습니다.