Вырежьте номер в файлах, названных по шаблону - PullRequest
0 голосов
/ 26 января 2012

У меня есть следующие файлы:

create_file_1.sql
create_file_2.sql
create_file_3.sql
create_file_4.sql

Я повторяю эти файлы в цикле.

Теперь я хочу получить число внутри этих файлов.Я хочу сохранить 1, 2, 3,… внутри переменной в цикле.

Как этого добиться?Как я могу вырезать это число?

PS: я хочу добиться этого с помощью команды AIX.

Ответы [ 4 ]

2 голосов
/ 26 января 2012

Использование sed:

[jaypal:~/Temp] echo "create_file_1.sql" | sed 's/.*_\([0-9]\+\)\.sql/\1/'
1

Использование bash:

[jaypal:~/Temp] var="create_file_1.sql"
[jaypal:~/Temp] tmp=${var%.*}  # Removes the extension
[jaypal:~/Temp] var=${tmp##*_} # Removes portion till the last underscore
[jaypal:~/Temp] echo $var
1

Использование awk:

[jaypal:~/Temp] echo "create_file_1.sql" | awk -v FS="[_.]" '{print $(NF-1)}'
1
1 голос
/ 26 января 2012

Ну ... Это зависит от того, насколько вы хотите быть гибким. Если вы можете предположить, что число является «частью между вторым подчеркиванием и первым периодом после второго подчеркивания», вы можете просто использовать:

NUMBER=$(echo $FILENAME | cut -d_ -f3 | cut -d. -f1)

при условии, что $FILENAME содержит текущее имя файла, конечно.

При этом используется <a href="http://linux.die.net/man/1/cut" rel="nofollow">cut</a>, чтобы сначала взять строку после второго подчеркивания, а затем вырезать ее, взяв строку, ведущую к первому периоду.

Это, по общему признанию, не использует регулярные выражения, которые, возможно, вы хотите, основываясь на ваших тегах, но я считаю, что выше немного легче читать для простого случая, как это.

0 голосов
/ 26 января 2012

Если в имени файла указан только один номер, который вы хотите получить, это также будет работать

for filename in create_file_1.sql create_file_2.sql create_file_3.sql create_file_4.sql ; do
    number=`echo $filename | grep [0-9]* -o`
done
0 голосов
/ 26 января 2012
for filename in create_file_1.sql create_file_2.sql create_file_3.sql create_file_4.sql
do
  i=$(echo $filename | cut -d_ -f3 | cut -d. -f1)
  # do something with $i
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...