Замена нескольких паттернов, один из которых имеет скобки, а другой символ табуляции

Поскольку файлы с отметкой даты будут собраны вместе в порядке глобусов оболочки (, например. *.txt), вы можете использовать массивы (, например, в bash):

n=2 ## how many of each you want to keep
txtfiles=(*.txt)
auxfiles=(*.txt_aux)
totaltxt=${#txtfiles[@]}
totalaux=${#auxfiles[@]}
movetxt=$((totaltxt-n))
moveaux=$((totalaux-n))
echo mv "${txtfiles[@]:0:movetxt}" /dir/aux2/
echo mv "${auxfiles[@]:0:moveaux}" /dir/aux2/

Удалите две последние echoчасти, когда все будет выглядеть правильно.

0
24.04.2019, 16:40
5 ответов

Если у васpgrep:

grep -Po '[0-9]+ [KMGT]?Hz(?= \(MCLK\))' test.txt
1
28.01.2020, 02:40

Может что-то вроде поможет:

awk '/(MCLK)/ {print $1,$2}' input_file
0
28.01.2020, 02:40

Попробуйте это,

sed '/(MCLK)/ s/(MCLK)//g;s/\t//' test.txt
800 MHz 
  • /(MCLK)/будет искать ключевое слово.
  • s/(MCLK)//gудалит (MCLK).
  • s/\t//удаляет вкладку.

вы можете использовать опцию -iдля встроенного редактирования.

На ваш отредактированный вопрос

awk -F '[$\t ]' '/(MCLK)/ {print $2" "$3}' test.txt
800 MHz
0
28.01.2020, 02:40

xargsберет свои входные данные и превращает их в аргументы данной команды. grepвозвращает интересующую вас строку, а xargsдобавляет эту строку в качестве аргумента к команде sed, которая вместо этого ожидает имя файла. Вам вообще не нужен xargs.

Вы можете указать sedдействовать только на той строке, которая соответствует шаблону:

sed -i~ -e '/(MCLK)/{s/\t//g' -e 's/(MCLK)//g}' ~/test.txt
0
28.01.2020, 02:40

Пробовал с помощью приведенной ниже команды, тоже работает нормально

команда

sed -n '/MCLK/p' filename| sed -r "s/^\s+//g"| sed -r "s/\(MCLK\)//g"

выход

sed -n '/MCLK/p' filename| sed -r "s/^\s+//g"| sed -r "s/\(MCLK\)//g"

800 MHz 
0
28.01.2020, 02:40

Теги

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