Bash에서 백슬래시를 쉼표로 바꾸기

Bash에서 백슬래시를 쉼표로 바꾸기

파일을 한 줄씩 읽는 스크립트를 작성하려고 합니다. 백슬래시(\)를 쉼표(,)로 바꿔야 합니다.

입력 파일은 다음과 같습니다.

1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5

내가 작성한 코드는 다음과 같습니다.

#!/bin/bash

cat $1 | while read -r line
do
ln=$(echo $line | xargs | sed 's/\\/,/g' )
echo $ln
done

echo Done!

실행하면 ./script.sh file.csv다음과 같은 결과가 나타납니다.

1,2,3,WORKSTATION1A,5
1,2,3,WORKSTATION2B,5
1,2,3,WORKSTATION1C,5
1,2,3,WORKSTATION1D,5
1,2,3,WORKSTATION1E,5
1,2,3,WORKSTATION1F,5
1,2,3,WORKSTATION1G,5
Done!

그러나 출력은 다음과 같을 것으로 예상됩니다.

1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5
Done!

sed 's/\\/,/g'또한 교체를 사용해 보았지만 tr "\\" ","도움이 되지 않았습니다. 수정이 필요합니까?

답변1

이거 해봤어?

# cat a.txt 
1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5

# sed -e 's/\\/,/g' a.txt 

1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5

답변2

시도한 것과 동일한 스크립트를 작성하는 더 좋은 방법은 다음과 같습니다.

#!/bin/bash

while read -r line
do
  echo "$line" | sed 's/\\/,/g'
done < "$1"

echo Done!

물론 모든 것을 다음과 같이 단순화할 수 있습니다.

#!/bin/bash

tr '\\' , < "$1"    

답변3

다음으로 푸시할 때 쉘이 백슬래시를 먹지 않는지 확인하십시오 sed.

sed 's/\\/,/g' <<\BS
1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5
BS

#OUTPUT#

1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5

답변4

여기에 awk 솔루션이 있습니다.

$ awk -F'\' '{print $1","$2}' file.txt
1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5

관련 정보