공백으로 구분된 단어 주위에 따옴표와 새 구분 기호를 추가하세요.

공백으로 구분된 단어 주위에 따옴표와 새 구분 기호를 추가하세요.

다음 문자열이 있습니다

y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis

로 변신하고 싶어요

"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"

나는 매우 추악한 방식으로 비슷한 것을 성취했습니다.

$ cat in.txt | sed 's/ /\'$'\n/g' | sed 's/\(.*\)/"\1",/g' | tr -d '\n'


"y10_zcis","y10_nom","y10_infl","y20_zcis","y20_infl","y30_zcis",

하지만 이는 완전히 실패한 것처럼 느껴지며 필요하지 않은 마지막 콘텐츠를 처리하지 않습니다 ,(그러나 사실 이후에 삭제하는 것이 더 나을 수도 있음).

답변1

넌 할 수있어

sed -e 's| |", "|g' -e 's|^|"|g' -e 's|$|"|g' in.txt

어디

  • 's| |", "|g'모든 공간을 대체할 것입니다", "
  • 's|^|"|g'처음에는 공백이 없더라도 ^줄 시작 부분에 지정 해야 하므로 "처음에 알려줍니다.
  • 's|$|"|g'동일하지만 각 줄의 끝을 지정하십시오.$

고쳐 쓰다

@don_crissti가 지적했듯이 다음을 사용하여 시간을 단축할 수 있습니다.

sed 's| |", "|g;s|.*|"&"|'

어디

  • ;각 명령어를 분리
  • .*전체 라인과 일치합니다.
  • &이 경우 오른쪽의 앰퍼샌드는 왼쪽에서 일치하는 전체 표현식으로 대체됩니다..*

    RHS=오른쪽

    LHS=왼쪽

답변2

아마도awk

awk -vOFS=', ' '{for (k=1; k<=NF; ++k) $k="\""$k"\""; print}' file
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis", "y30_nom", "y30_infl"

답변3

넌 할 수있어:

sed 's/\([^ ]\+\)/"\1",/g; s/,$//' file.txt

예:

% sed 's/\([^ ]\+\)/"\1",/g; s/,$//' <<<'y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis'   
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"

답변4

bash를 사용하고 있고 문자열이 이미 변수에 있다고 가정합니다.

$ a="y10_zcis y10_nom y10_infl y20_zcis y20_infl y30_zcis"
$ 

그러면 다음과 같이 할 수 있습니다:

$ echo \"${a// /\", \"}\"
"y10_zcis", "y10_nom", "y10_infl", "y20_zcis", "y20_infl", "y30_zcis"
$ 

관련 정보