как захватить строку из строки csv, которая идет после определенного слова

Если вы вообще можете загрузиться в свою систему, вы можете удалить последнюю версию ядра. Ядра — это пакеты. Следующая команда даст вам список установленных в вашей системе:

dpkg -l | grep linux-image

Последней версией будет форма linux-image-<version number>-genericс самым высоким номером версии. Чтобы удалить его, выполните следующее как root:

apt remove linux-image-<version number>-generic

Наконец, чтобы обновить grub, чтобы он знал, какие версии ядра доступны для загрузки, выполните следующее от имени пользователя root:

update-grub
0
03.03.2020, 13:44
6 ответов

У @pLumo есть абсолютно правильный ответ. Если по какой-либо причине вы хотите использовать awkи расширение встроенных параметров bash, при этом все время слегка запутываясь...

LINE_COUNTER=0
while read line; do
    COUNT_SEP="${line//[^,]}"
    for col in $(seq 2 $((${#COUNT_SEP}+1))); do
        LINE_COUNTER=$(($LINE_COUNTER+1))
        COLUMN=$(echo "${line}" | awk -v variable="${col}" -F, '{ print $variable }')
        if [ $LINE_COUNTER -eq 1 ]
        then
            echo "${COLUMN}" > /tmp/splitCSV
        else
            echo "${COLUMN}" >> /tmp/splitCSV
        fi
    done
    while read splitCol; do
        echo "${splitCol}" | awk -F'/data/' '{ print $2 }' | awk -F'/' '{ print $1 }'
    done < /tmp/splitCSV
done < test.csv
1
28.04.2021, 23:21

Используйтеgrep:

с ПКРЭ:

grep -Po '/data/\K[^/]*'

если это недоступно:

grep -o '/data/[^/]*' | cut -d'/' -f3
4
28.04.2021, 23:21

Просто чтобы добавить параметр, имея в виду, что существует только один шаблон, который соответствует трем символам между косой чертой, с sedиgrep:

grep -o "/.../"  foo | sed 's;/;;g' file

Выход:

sdb
sdc
sdd
sde
sdf
1
28.04.2021, 23:21

Мы можем выбрать из следующих:

awk -F/ '
     BEGIN { OFS = RS }
     {
       N = split($0, a, /\//)
       $0 = "" 
        for ( i=j=1; i<N; i++ ) 
            if ( a[i] == "data" ) 
                 $(j++) = a[++i]
      }N>1' file.csv


perl -F/ -lane '
   shift(@F) eq q(data) and print(shift(@F)) 
      while(@F && m{/data/});
' file.csv


perl -lne 'print for m{/data/([^/,]+)}g' file.csv


sed -re '
    /\n/{P;D;}
    s:/data/([^/,]+):\n\1\n:
   D
' file.csv
1
28.04.2021, 23:21

Для ввода выше будет работать команда ниже

perl -pne "s/,/\n/g"  filename|awk -F '/data/' '{gsub("/.*","",$2);print $2}'

выход

sdb
sdc
sdd
sde
sdf
1
28.04.2021, 23:21

Это работает для меня с awk

awk -F'/' '{for(i=1;i<=NF;i++) if($i=="data") print $(i+1)}' <file>

1:-F определяет разделитель полей как /

2 :цикл для каждого поля в каждой строке

3 :если поле равно "данные", вывести следующее поле

1
28.04.2021, 23:21

Теги

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