![공백으로 구분된 단어 주위에 따옴표와 새 구분 기호를 추가하세요.](https://linux55.com/image/84854/%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C%20%EA%B5%AC%EB%B6%84%EB%90%9C%20%EB%8B%A8%EC%96%B4%20%EC%A3%BC%EC%9C%84%EC%97%90%20%EB%94%B0%EC%98%B4%ED%91%9C%EC%99%80%20%EC%83%88%20%EA%B5%AC%EB%B6%84%20%EA%B8%B0%ED%98%B8%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EC%84%B8%EC%9A%94..png)
다음 문자열이 있습니다
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"
$