Проверка файлов в другом использовании папки для цикла

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

sed

  • $ sed -r 's/([^0-9]*)([0-9]*)([^0-9]*)/1: "\1", 2: "\2", 3: "\3"/" файл. 1:", 2: "1844", 3: "-PAL.Bak". 1: "IMG_", 2: "1959", 3: "bak". 1: "ZER_", 2: "1940", 3: "BAK". 1: "PEN", 2: "225", 3: "bak". 1: "Слово", 2: "1943", 3: "БАК".
    perl

  • $ perl -lpe 's/([^\d]*)(\d*)([^\d])/1: "$1", 2: "$2", 3: "$3"/" файл. 1:", 2: "1844", 3: "PAL.Bak". 1: "IMG_", 2: "1959", 3:". "Пекарь". 1: "ZER_", 2: "1940", 3:". "BAK". 1: "ПЕН", 2: "225", 3:". "Пекарь". 1: "Слово", 2: "1943", 3: "БАК".
    grep

$ grep -oP '\d+' file 1844 1959 1940 225 1943


  ServerName            www.example.com
  ServerAlias           example.com
  ServerAdmin           webmaster@example.com
  DocumentRoot          /internet/com/example/www
  ScriptAlias /cgi-bin/ /internet/com/example/cgi-bin
  CustomLog             /internet/com/example/logs/access.%Y-%m.log combined
  ErrorLog              /internet/com/example/logs/errors.%Y-%m.log
  
    AddOutputFilter INCLUDES .html
    Options +Includes +ExecCGI
    DirectoryIndex index.html
    ErrorDocument 404 /404.html
  

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

/internet/com/example/www/
/internet/com/example/logs/
/internet/com/example/cgi-bin/

или

  1. В общем случае, с регулярными выражениями, меньше - больше. Всегда следует стараться использовать простейшие регулярные выражения. Если вы не хотите перехватывать или сопоставлять не нумерованные символы, то оставьте их в регексе.[1131981]

1
30.04.2014, 02:55
2 ответа

Предполагая, что и folder1 , и folder2 находятся в родительской папке,

parent
   folder1
   folder2

Вы можете перефразировать цикл for следующим образом:

for file in ../folder2/*.csv

Как правило, вы всегда можете указать абсолютные пути к таким циклам:

for file in /home/username/parent/folder2/*.csv
do
    split -l 50000 -d -a 4  "$file" "$file"
done

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

5
27.01.2020, 23:12

Вы можете использовать pushd и popd всякий раз, когда вам нужно сменить каталог для некоторых операций, а затем вернуть его к исходному.

pushd /path/to/folder2
for file in *.csv
do
  split -l 50000 -d -a 4  "$file" "$file"
done
popd
3
27.01.2020, 23:12

Теги

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