grep для извлечения подстрок в строке

Вы могли использовать, найдите:

find test_file -type f -name "*Error*" -exec mv {} Error_directory/ \;

где -type f обозначает, что Вы ищете файлы, -name состояния, которым Вы соответствуете на данном шаблоне. exec выполняет следующую команду, с {} занимание места файлов, которые соответствуют параметрам, данным для нахождения.

Если Вы хотите использовать удар и сделать что-то больше вроде того, что Вы попробовали, цикл должен добиться цели:

for f in `ls test_file | grep 'Error'; do
  mv test_file/${f} Error_directory
done

В обоих примерах я предположил, что test_file является каталогом, содержащим файлы, которыми Вы интересуетесь.

0
08.02.2014, 05:02
3 ответа

Это должно работать:

yourcommand | grep -A3 Heading1 | grep -v Heading1
1
28.01.2020, 02:20
  • 1
    Объяснение, почему это должно работать, было бы полезно... –  Potherca 04.05.2015, 21:27

Вот awk решение:

yourcommand | awk '/Heading1/ {for(n=0; n<3; n++) {getline; $1=$1; print}}'

Обновление

Если между Heading1 и конец представляет в виде строки, только имеют строки, запускаются с пространства, можно сделать как это:

yourcommand | awk '/Heading1/ {flag=1;next} /^\w+/ {flag=0} {$1=$1} flag'
1
28.01.2020, 02:20

Примерно, как сделать это:

$ sed -n -e '/Heading1/,/Heading2/ p' file.txt | grep "^ " | sed 's/^[ ]\+//g'
I am one value.
I am another value.
I am third value. 

Более сжатая версия, использует pcregrep который допускает многострочное соответствие:

$ pcregrep -M 'Heading1(\n|.)*Heading2' file.txt | grep "^[ ]\+"
   I am one value.
   I am another value.
   I am third value. 

Для избавлений от пробелов в начале с помощью этого метода Вы могли использовать grepсредство PCRE:

$  pcregrep -M 'Heading1(\n|.)*Heading2' a.txt | grep -oP "^[ ]{3}\K.*"
I am one value.
I am another value.
I am third value. 

Наконец вот a sed и awk решение.

$ sed -n -e '/Heading1/,/Heading2/ p' file.txt | awk '/^ / {sub(/^[ ]+/, ""); print}'
I am one value.
I am another value.
I am third value. 
2
28.01.2020, 02:20
  • 1
    спасибо за ответ. Что, если я не знаю имя второй строки как Heading2? Это может быть что-либо и все, что я знаю, заголовок запускается в той строке \ –  Ramesh 08.02.2014, 04:49
  • 2
    @Ramesh - Вы знаете что-нибудь об этом или нет? –  slm♦ 08.02.2014, 04:58
  • 3
    Нет, я ничего не знаю о второй строке. Все, что я знаю, является первой строкой. –  Ramesh 08.02.2014, 04:59
  • 4
    я обновлю свой вопрос с надлежащим примером. –  Ramesh 08.02.2014, 04:59

Теги

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