다음 문자열이 있습니다
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"
$