쉘 스크립트를 보는 동안 나는 다음 줄을 발견했습니다.
sed '1{/^$/d}' $file1 >> $file2
여기서 요점은 무엇입니까 sed '1{/^$/d}'
?
답변1
1행이 비어 있으면 삭제하세요.
1{
- 1호선에 있는 경우/^$/
- 이것은 빈 줄입니다.d
- 라인 삭제}
- 조건 종료
아래 예.
$ cat x1
Hello
World
$ sed '1{/^$/d}' x1 >x2
$ cat x2
Hello
World
$
답변2
GNU sed
표현식
1{/^$/d}
어느 것이 쓰기에 더 이식성이 좋나요?
1{/^$/d;}
또는
1 {
/^$/ d
}
두 부분으로 나누어집니다:
1 {...}
/^$/ d
현재 줄이 입력의 첫 번째 줄인 경우 첫 번째 부분은 중괄호 안에 명령을 실행합니다.
d
현재 줄이 비어 있는 경우, 즉 줄의 시작 부분 ^
뒤에 줄 끝이 오면 $
두 번째 부분이 명령을 트리거합니다. 이 d
명령은 현재 입력을 버리고 다음 루프를 즉시 시작합니다. 즉, 다음 입력 줄로 점프하고 처음부터 표현식을 평가합니다.
1
와 둘 /^$/
다주소후속 명령이 적용될 줄에 영향을 줍니다.
즉, sed
입력의 첫 번째 줄이 비어 있으면 명령은 다른 빈 줄을 삭제하지 않고 해당 줄을 삭제합니다.
표현 방식
/^$/ { 1 d; }
동일한 작업을 수행하지만 sed
모든 입력 줄에서 정규식 일치를 수행해야 하므로 비용이 더 많이 들 수 있습니다(입력 크기가 크고 컴퓨터가 매우 느리지 않으면 차이를 느낄 수 있을지 의심스럽습니다).
그 외에도 명령에서 변수를 인용해야 할 가능성이 높으며 에 무엇이 있는지 모르기 때문에 $file1
명령이 실수로 대시로 시작하는 값을 옵션 집합으로 해석하는 것을 방지하는 것이 좋습니다.
sed -- '1 { /^$/ d; }' "$file1" >>"$file2"
또는,
sed -e '1 { /^$/ d; }' -- "$file1" >>"$file2"
또는 sed
표준 입력에서 읽는 경우,
sed '1 { /^$/ d; }' <"$file1" >>"$file2"
당신은 또한 볼 수 있습니다