텍스트 파일의 내용은 다음과 같습니다.
chair
table
pen
desk
var
이제 아래와 같이 변경하여 변수에 저장하고 싶습니다.
('의자','의자'),('테이블','테이블'),('펜','펜'),('테이블','테이블')
가능합니까?
편집하다 Jofel의 답변은 다음과 같은 오류를 제공합니다.
$ sed ':a;N;$!ba;s/\n/,/g;s/\w*/(''&'',''&'')/g' -i csclm.txt
sed: The label :a;N;$!ba;s/\n/,/g;s/\w*/(&,&)/g is greater than eight characters.
나는 다음을 사용하고 있습니다 :
$ uname -a
HP-UX rcihp145 B.11.23 U 9000/800 3683851961 unlimited-user license
답변1
그것을 사용하는 한 가지 방법 sed
:
콘텐츠script.sed:
## Change line.
s/.*/('&','&')/
## Append it to hold space.
H
## In end of file substitute newlines with commas and print.
$ {
g
s/^\n//
s/\n/,/g
p
}
주문하다:
sed -nf script.sed infile
산출:
('chair','chair'),('table','table'),('pen','pen'),('desk','desk')
답변2
하위 프로세스가 필요하지 않으며 순수 bash 셸에서 수행할 수 있습니다.
var=$(while read line; do echo -n ",('$line','$line')"; done < file)
var=${var:1}
고쳐 쓰다:
라인으로 원할 경우 다음을 수행할 수 있습니다.
var=$({ read line && echo -n "('$line','$line')" && while read line; do echo -n ",('$line','$line')"; done } < file)
&&
이는 파일이 비어 있지 않은 경우 echo
에만 수행 됩니다.while
답변3
이는 순수한 셸 접근 방식입니다. 각 줄을 읽고 올바르게 처리된 데이터를 추가합니다 var
. 추가 쉼표를 제거합니다.
var=
while IFS= read -r line; do
var="$var,('$line','$line')"
done <input_file
var=${var#,}
외부 유틸리티를 사용하여 이를 수행하는 간단한 방법은 다음과 같습니다. 를 사용하여 각 줄을 수정 sed
한 다음 줄 바꿈을 쉼표로 변환합니다. 추가 쉼표를 제거하세요.
var=$(<input_file sed "s/.*/('\1','\1')/" | tr "\n" ',')
var=${var%,}
답변4
이것은 (프로세스 대체 때문에) bash 쉘에서만 작동하지만 간단한 명령만으로 작동하는 매우 복잡한 방법입니다.
var=$(sed -e "s/^/'/" -e "s/\$/'/" file |
paste -d "," - <(sed -e "s/^/'/" -e "s/\$/'/" file) |
sed -e "s/^/(/" -e "s/\$/)/" |
paste -s -d ",")