텍스트 파일의 모드 변경

텍스트 파일의 모드 변경

텍스트 파일의 내용은 다음과 같습니다.

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 ",")

관련 정보