여러 줄의 파일이 있습니다.
파일의 각 줄에 표시되는 마지막 문자가 작은따옴표인지 확인하면서 파일을 업데이트하고 싶습니다 '
. 그렇지 않은 경우 각 줄 끝에 작은따옴표를 추가해야 합니다.
작은따옴표가 줄의 마지막 문자인 경우 그대로 두십시오.
고양이 테스트.txt
fahsjhjkhkjhjhajkhjf
afasfsfsfffsfasf'
aaffa' sfff
wfafsfsaffs'
fsafsfs'afffafsasf
예상 출력:
fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'
답변1
이 sed
표현식은 s/[^']$/&'/
작은따옴표가 아닌 문자로 끝나는 줄의 끝에 작은따옴표를 삽입합니다.
셸에서:
sed "s/[^']$/&'/" file
표현식에는 작은따옴표가 포함되어 있으므로 큰따옴표로 표현식을 작성하기로 결정했습니다. 내부 편집을 수행하려면 이 비표준 옵션을 구현하는 경우 sed
해당 옵션을 사용하십시오.-i
빈 줄에 작은따옴표를 삽입하려면 빈 줄에 대해 특별히 추가 표현식을 사용하거나 다음을 수행할 수 있습니다.언제나줄 끝에 작은따옴표를 삽입하고 결과로 나오는 큰 작은따옴표를 바꿉니다.
즉,
sed -e "s/[^']$/&'/" -e "/^$/s//'/" file
또는
sed -e "s/$/'/" -e "s/''$/'/" file
답변2
일치하는 작은따옴표가 있고 존재하는 경우 이를 바꾸는 것이 허용되는 경우 다음을 시도해 볼 수 있습니다 sed
.
$ sed "s/\([^']*\)'\?$/\1'/" input_file
'fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'
이는 역참조를 사용하여 줄 끝까지의 모든 문자를 캡처합니다. 줄 끝에 작은따옴표가 있는 경우 캡처 대괄호 외부에 작은따옴표를 배치하여 이를 제외/제거합니다.
대괄호 안에 캡처된 모든 항목은 \1
각 줄 끝에 하드코딩된 작은따옴표와 함께 반환됩니다.
답변3
다음과 같은 작업이 수행됩니다.
awk -v a=\' '{print $0 a}' input.file
끝에 큰따옴표를 사용하지 않으려면 다음을 시도해 보세요.
awk -v a=\' '{print $0 a}' input.file|sed "s/''$/'/"
답변4
'
빈 입력 줄을 출력에 표시 하고 입력은 foo''
다음과 같은 출력을 원한다고 가정합니다 foo'
.
$ sed "s/'*$/'/" file
fahsjhjkhkjhjhajkhjf'
afasfsfsfffsfasf'
aaffa' sfff'
wfafsfsaffs'
fsafsfs'afffafsasf'