예를 들어, 각 줄에 대한 단어 목록이 있는 파일을 얻고 싶습니다.
act
bat
cat
dog
eel
그리고 한 줄에 나열하고, 쉼표로 구분하여 인용하세요. 결과는 다음과 같습니다.
'act', 'bat', 'cat', 'dog', 'eel',
따라서 작은따옴표, 단어, 또 다른 작은따옴표, 쉼표, 공백 순입니다. 그런 다음 새 이름의 새 파일로 출력합니다.
답변1
짧은printf
방법:
printf "'%s', " $(< file) > output
답변2
사용 sed
및 tr
:
$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n'
'act', 'bat', 'cat', 'dog', 'eel',
(출력 끝에 개행 문자가 없습니다)
input 의 각 줄 시작과 끝 부분에 sed
따옴표(및 후속 쉼표와 공백)를 삽입하고 tr
줄 바꿈을 제거합니다.
출력을 파일로 리디렉션:
$ sed -e "s/^/'/" -e "s/$/', /" file | tr -d '\n' >newfile
답변3
사용 awk
:
awk '{printf ("'\'%s\'', ", $0)}' infile > new_file
'act', 'bat', 'cat', 'dog', 'eel',
또는 끝에 추가 쉼표를 피하려면 대신 다음을 사용하십시오.
awk '{printf S"'\''"$0"'\''";S=", "}'
'act', 'bat', 'cat', 'dog', 'eel'
paste
아니면 따옴표 없이 직접 사용하세요 .
paste -d, -s infile
act,bat,cat,dog,eel
그런 다음 도움말을 통해 참조하십시오 sed
.
sed -r "s/(\w+)/'\1'/g" <(paste -d, -s infile)
'act','bat','cat','dog','eel'
답변4
펄 방법:
$ perl -lne '$sq="\x27";push @a,$sq.$_.$sq;END{ print join( ",",@a) }' input.txt
'act','bat','cat','dog','eel'
- 여기서는 16진수 값을 변수에 저장된 작은따옴표로 사용
sq
하고 파일에서 읽은 각 줄에 대해 작은따옴표로 묶습니다. a
작은따옴표가 있는 각 줄은 배열 로 푸시됩니다.- 모든 내용을 읽은 후 Join은 각 배열 항목에서 다음과 같이 연결된 텍스트 문자열을 생성합니다.
,
Python 메서드는 동일한 아이디어를 따릅니다.
$ python -c 'import sys;sq="\x27";print ",".join([ sq + l.strip() + sq for l in sys.stdin ])' < input.txt
'act','bat','cat','dog','eel'
stdin
여기서는<
쉘 연산자를 통해 입력 파일을 명령 스트림으로 리디렉션합니다.\n
각 줄은 Perl 메소드에서 설명한 것과 동일한 아이디어를 통해 참조되는 스트립 메소드를 통해 개행 문자에서 제거됩니다.[item for item in iterable]
모든 행은 구조 (목록 이해라고 함)를 통해 목록으로 처리됩니다 .- 마지막으로
",".join()
모든 목록 항목에서 멋진 문자열을 만들어 보겠습니다.