다음과 같이 입력하면
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에서 시작)를 연결한 다음 다섯 번째 필드와 배열 끝까지(배열에서 가장 높은 인덱스)까지 다른 모든 필드를 연결하여 새 문자열을 만들고 문자열을 인쇄합니다.perl
awk
-F
@F
join ",",@F[0,2,4..$#F]'
$#F
print
답변4
awk 'BEGIN{FS=",";OFS=","}{$2=$4="\b";print $0}' file