다음과 같이 모든 \n
개행 문자를 이스케이프 시퀀스로 바꾸고 모든 작은 따옴표 문자를 \n
그 중 두 개로 전역적으로 바꾸고 싶습니다 .'
''
function esc_foobar {
# Escapes any "'" single quotation character.
local -r esc_quot="s:':'':g"
# Escapes any "\n" new line character.
local -r esc_nl=':a;N;$!ba;s:\n:\\n:g'
# Escape everything in one sed run.
sed -- "$esc_quot;$esc_nl" foobar.txt
}
파일에 다음이 포함되어 있다고 가정할 때 foobar.txt
:
Foo's bar
Bar's foo
첫 번째 '
작은따옴표 문자만 두 배가 됩니다.
명령에서 및 대체의 순서를 바꾸면 esc_quot
작동합니다. 즉, 모든 작은따옴표 문자가 예상대로 두 배가 됩니다.esc_nl
sed
$esc_nl;$esc_quot
'
왜 그럴까요?
답변1
Sed를 자세히 살펴보고 구체적으로 Sed의 N
명령을 이해하려고 노력한 후 나에게 적합한 다음과 같은 작은 Sed 스크립트를 생각해 냈습니다.
sed -- '$!N;s:\n:\\n:g;'"s:':'':g"
내 질문에 있는 Sed 스크립트의 두 번째 변형에는 입력이 홀수 줄인 경우 마지막 줄을 변경하지 않고 그대로 두는 문제가 있습니다.