sed 또는 유사한 도구를 사용하여 빈 문자열을 텍스트로 바꿉니다.

sed 또는 유사한 도구를 사용하여 빈 문자열을 텍스트로 바꿉니다.

하나 교체 가능한가요?빈 문자열텍스트 sed나 유사한 도구를 사용하시나요?

sed 's/^$/sometext/'

일치합니다빈 줄그러나 그것은 내가 원하는 것이 아닙니다. 나는 생각했다

sed 's//sometext/'

효과가 있을 것 같지만 그렇지 않은 것 같습니다.


grep이 특별한 경우에는 불일치를 감지하고 싶습니다 .

echo 'hi' | grep 'sam' | ...

답변1

sed빈 줄을 바꾸려면 빈 줄을 입력해야 합니다 .

빈 줄 자체는 개행 문자입니다. 이는 echo또는 를 사용하여 생성 할 수 있습니다 printf '\n'.

$ printf '\n' | sed 's/^$/sometext/'
sometext
$ echo | sed 's/^$/sometext/'
sometext

대체되니 참고하세요모두다른 줄이 비어 있지 않은지 여부에 관계없이 입력의 빈 줄입니다.

$ printf '%s\n' "line 1" "" "line 3" | sed 's/^$/sometext/'
line 1
sometext
line 3

빈 입력을 감지하고 문자열을 삽입하려면 ifnemoreutils 패키지와 해당 -n옵션을 사용할 수 있습니다.

$ printf '' | ifne -n echo sometext
sometext

여기서는 표준 입력 스트림에서 입력이 감지되지 않는 경우에만 실행됩니다 echo sometext. ifne파이프의 왼쪽에 있는 경우하다출력될 데이터를 생성합니다.

$ printf 'hello\n' | ifne -n echo sometext
hello

불일치 감지에 대한 추가 정보는 다음과 같습니다 grep.

echo 'hi' | grep -q 'sam' || echo no match

또는 단락 논리 대신 ifthen

if ! echo 'hi' | grep -q 'sam'; then
    echo no match
fi

이는 grep해당 -q옵션과 함께 사용되어 유틸리티가 매우 조용해지고 종료 상태만 사용하여 일치 성공 또는 실패 신호를 보냅니다. e가 일치하지 않으면 0이 아닌 종료 상태로 종료됩니다. 위의 코드는 이를 감지하고 실행합니다 echo no match.

답변2

내 생각은 일치하는 항목이 없거나 printf ''a가 grepnull 문자를 출력하는 경우 일부 명령을 사용하여 이를 감지하고 바꿀 수 있다는 것입니다.

printf ''일치하지 않는 A 및 a는 grep총 0바이트로 출력됩니다. 이는 \0대체할 내용이 없는 NUL( ) 바이트와 다릅니다 .

길이가 0인 문자열과 일치하는 정규식은 일반적으로 printf 'foo\n' | sed -E 's/.{0}/X/g'인쇄 와 같이 모든 문자 간에 일치하므로 사용할 수 없습니다 XfXoXoX. ( sed -e 's//.../'sed에서 빈 정규식은 이전 정규식을 재사용한다는 의미이므로 전혀 작동하지 않습니다.)

우리는 다른 방법으로 빈 입력을 감지해야 합니다.

다음 AWK 스크립트는 모든 입력 행을 출력에 복사하거나, 없는 경우 인쇄합니다 new text.

$ printf '' | awk '1; END { if (NR == 0) printf "new text\n"; }'
new text
$ printf 'xxx\nyyy' | awk '1; END { if (NR == 0) printf "new text\n"; }'
xxx
yyy

( NR실제로는 입력에 "레코드" 수가 포함됩니다. 누락된 경우 마지막 줄에 후행 줄바꿈이 추가됩니다.)

답변3

@Kamil Maciorowski가 의견에서 지적했듯이 특정 경우에 grep구문 분석할 수 있습니다 .종료 코드그 대신에표준 출력:

$ echo 'hi' | grep 'bye' || echo 'sam'
sam

그러면 발생하는 모든 일치 항목도 처리될 수 있습니다.

$ echo 'hi' | grep 'hi' || echo 'sam'
hi

일치를 억제하려면 grep다음 옵션을 사용하십시오 -q.

$ echo 'hi' | grep -q 'hi' || echo 'sam'

관련 정보