내 파일에는 다음과 같은 긴 줄이 있습니다.
#cat file
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0, 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0, 5FaJmwwoBABC0-frsf9xucw==|...
쉼표 문자를 새 줄로 바꾸고 싶으므로 출력은 다음과 같습니다.
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...
보다 구체적으로 말하면, 쉼표는 "5" 문자 앞에 옵니다. "5" 문자 앞에는 항상 공백이 있다는 점에 유의하십시오.
다음을 사용하여 쉼표를 간단히 바꿀 수 있습니다.
#cat file | sed -e $'s/,/\\\n/g'
그러나 쉼표가 때때로 다음과 같이 다른 어색한 위치에 있을 수 있기 때문에 그것만으로는 충분하지 않습니다.
#cat file
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==...
나는 sed를 사용하는 것을 선호하지만 다른 솔루션도 훌륭합니다. 4시간 동안 인터넷을 검색했지만 정확한 문제에 대한 해결책을 찾을 수 없습니다.
답변1
sed방법:
cat file
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0, 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0, 5FaJmwwoBABC0-frsf9xucw==|...
sed 's/, \(\S*==\)/\n\1/g' file
산출:
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...
\S*==
- 공백이 아닌 문자의 다음 순서는 ==
각 줄의 선행 순서로 처리됩니다.
답변2
더 간단한 해결책 tr
은 다음과 같습니다.
cat file | tr "," "\n"
tr
쉼표를 찾아서 ,
새 줄로 바꾸는 곳은 어디입니까?\n
산출:
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...
쉼표 앞의 공백은 유지됩니다.