sed를 사용하여 파일에서 두 번째 및 네 번째 쉼표로 구분된 단어를 모두 제거하는 방법은 무엇입니까?

sed를 사용하여 파일에서 두 번째 및 네 번째 쉼표로 구분된 단어를 모두 제거하는 방법은 무엇입니까?

다음과 같이 입력하면

this,is,a,test,string,containing,multiple
lines,of,string,with,numb3rs,and,w0rds

sed를 사용하여 각 줄의 두 번째와 네 번째 단어를 삭제하고 싶습니다. 단어는 엄격하게 영숫자입니다.

답변1

가장 자연스러운 도구는cut.

cut -d , -f 1,3,5-

sed의 경우 \([^,]*,\)필드를 일치시키는 데 사용됩니다.

sed 's/^\([^,]*,\)\([^,]*,\)\([^,]*,\)\([^,]*,\)/\1\3/'

답변2

sed는 아니지만 Miller(https://github.com/johnkerl/miller) 그리고 실행

<input mlr --csv -N unsparsify then cut -x -f 2,4

가지다

this,a,string,containing,multiple
lines,string,numb3rs,and,w0rds

답변3

각 행의 두 번째 및 네 번째 필드만 삭제하려면 다음을 수행할 수 있습니다.

$ perl -F, -lane 'print join ",", @F[0,2,4..$#F]' file
this,a,string,containing,multiple
lines,string,numb3rs,and,w0rds

입력 파일을 읽고 -n주어진 스크립트를 각 줄에 perl적용하도록 지시합니다. 그 이유는 입력을 주어진 문자로 분할하고 결과를 배열에 저장하는 -e것과 같습니다 . -a그런 다음 첫 번째와 세 번째 필드(배열은 0에서 시작)를 연결한 다음 다섯 번째 필드와 배열 끝까지(배열에서 가장 높은 인덱스)까지 다른 모든 필드를 연결하여 새 문자열을 만들고 문자열을 인쇄합니다.perlawk-F@Fjoin ",",@F[0,2,4..$#F]'$#Fprint

답변4

awk 'BEGIN{FS=",";OFS=","}{$2=$4="\b";print $0}' file

관련 정보