Как с помощью sed удалить из файла каждое второе и четвертое слово, разделенное запятыми?

При использовании оболочки zshили bashиспользуйте параметр -s для встроенной оболочки read, чтобы считать строку с терминального устройства без ее повторения.

IFS= read -rs VARIABLE < /dev/tty

Затем вы можете использовать какое-нибудь необычное перенаправление, чтобы использовать переменную в качестве стандартного ввода.

sha1pass <<<"$VARIABLE"

Если кто-то запустит ps, все, что он увидит, это «sha1pass».

Это предполагает, что sha1passсчитывает пароль со стандартного ввода (в одну строку, игнорируя разделитель строк ), если не задан аргумент.

0
19.04.2020, 16:10
3 ответа

Наиболее естественным инструментом для этого являетсяcut.

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

С помощью sed используйте \([^,]*,\)для сопоставления одного поля.

sed 's/^\([^,]*,\)\([^,]*,\)\([^,]*,\)\([^,]*,\)/\1\3/'
4
19.03.2021, 02:27

это не 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
1
19.03.2021, 02:27
awk '{ split($0,a,","); delete a[4]; delete a[2]; for (i=1;i<=length(a); i++){ if(a[i]!="") printf "%s,", a[i] }; printf "\n";}' inputfile

Этот второй не работает, несмотря на эту строку вman gawk:

Assigning a value to an existing field causes the whole record to be rebuilt when $0 is referenced. Similarly, assigning a value to $0 causes the record to be resplit, creating new values for the fields.

gawk 'BEGIN{ FS=","; OFS="," }{ $2=""; $4=""; a=$0; $0=a; print $0 }' inputfile

РЕДАКТИРОВАТЬ :Вышеупомянутое не работает из-за FS и gow awk обрабатывает их, и поэтому это работает:

gawk 'BEGIN{ FS=","; OFS="," }{ gsub(FS $2,""); gsub(FS $4,""); print $0 }'

выход:

this,a,test,containing,multiple
lines,string,with,and,w0rds
0
19.03.2021, 02:27

Теги

Похожие вопросы