2016-01-25 3 views
0

У меня есть Баш скрипт, который возвращает что-то вроде следующего:Unix вырезать на основе того, в колонке

/title 
my_title 
/year 
2017 

Как я могу вытащить год (2017), используя простую команду вырезать (или что-то в этом роде чем может быть написано)?

Я знаю, что cut -d\ -f2 будет работать, если название не существует ... так как я могу пропустить титул и захватить только год?

ответ

4
$ sed -n '/\/year/{n;p;q}' infile 
2017 

Это делает:

/\/year/ { # If the line matches "year" 
    n  # Get next line 
    p  # Print line 
    q  # Quit: don't have to read the rest of the file 
} 

-n не делает, что ничего другого распечатана.

+0

... Спасибо, что если бы я хотел, чтобы включить это в сам скрипт. Вместо команды cut. out = "$ (bin/getYear.sh)" year = "$ (echo $ out | cut -d \ -f2)" –

+1

@ K.R. 'year =" $ (sed -n '/ \/year/{n; p; q}' infile) "'? –

+0

@ K.R. Вы можете заменить 'infile' на результат вашего скрипта:' year = '$ (sed -n'/\/year/{n; p; q} '<(bin/getYear.sh)) "' –

2

Если 4 цифры года появляется в отдельной строке, как показано выше, то вы можете использовать AWK:

awk 'p=="/year"{print; exit} {p=$0}' file 
2017 
0

Если вход точно такой, как показано, срез не будет работать вообще, поскольку он работает на одной линии за раз.

Вы можете использовать tail, чтобы получить последнюю строку:

tail -n 1 

или четвертую строку:

tail -n+4 

или grep + tail, чтобы получить линию follwing /year:

grep -A1 'year' | tail -n1 

grep -A1 напечатает один после соответствующего флага, который вы затем извлекаете с помощью хвоста.

Смежные вопросы