Как отсортировать Дневник?

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

for keyurl in $DATA; do … разделения $DATA в каждом пробеле, не в каждой новой строке. Таким образом в первом повторении, $DATA будет Example; затем Domains;www.example.com, и так далее. Кроме того, каждое значение подвергается подстановочному расширению, поэтому если существует a * в ключевом слове Вы могли бы видеть броские результаты в зависимости от файлов, существующих в текущем каталоге.

Вы - Тринг для обработки разделенных от новой строки данных. Простой путь

while read -r keyurl; do
  …
done 

Это разделяет добавление отступа от каждой строки, которая является, вероятно, не плохой вещью здесь. (Используйте IFS= read -r keyurl если Вы хотите keyurl содержать каждую строку точно.)

Ваши вызовы к awk не работают, потому что Вы являетесь передающими $keyurl как имя файла. Необходимо передать его как вход вместо этого. В то время как Вы в нем, всегда используйте двойные кавычки вокруг подстановок переменных (иначе, оболочка выполняет некоторые расширения на их значении). Я также рекомендую использовать $(…) вместо `…`; они - то же, кроме этого `…` является трудным использовать, когда Вы хотите заключить вещи в кавычки внутри, тогда как синтаксис $(…) интуитивно.

keyword=`echo "$keyurl" | awk -F ";" '{print $1}'`
url=`echo "$keyurl" | awk -F ";" '{print $2}'`

Существует лучший способ разделить переменную в первой точке с запятой: используйте встроенные конструкции оболочки для разделения префикса или суффикса от строки.

keyword=${keyurl%%;*} url=${keyurl#*;}

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

while IFS=';' read -r keyword url; do …

При прибытии в завихрение и вызовы grep, обратите внимание поиск буквенного текста $keyword, так как Вы использовали одинарные кавычки. Используйте двойные кавычки; обратите внимание, что ключевое слово будет интерпретироваться как основное регулярное выражение. Если Вы хотите, чтобы ключевое слово было интерпретировано как литеральная строка, передайте -F опция к grep. Необходимо также поместить -e перед шаблоном, в случае, если ключевое слово начинается с символа - (иначе ключевое слово было бы интерпретировано как опция к grep). Наконец по теме grep, -q опция эквивалентна >/dev/null. Также помните двойные кавычки вокруг $url.

curl -silent "$url" | grep -Fqe "$keyword"

Можно сократиться if [ $? != 0 ]; then часть путем помещения команды непосредственно там.

if curl -silent "$url" | grep -Fqe "$keyword"; then

Таким образом;

while IFS=';' read -r keyword url; do
  if curl -silent "$url" | grep -Fqe "$keyword"; then
    echo "Did not find $keyword on $url"
  else
    echo $url "Okay"
  fi
done

0
23.04.2012, 16:07
1 ответ

Альтернатива должна переименовать файлы:

for FILE in Days/*
do
      DAY=`cut --delimiter '_' --fields 1 ${FILE}`
      MONTH=`cut --delimiter '_' --fields 2 ${FILE} | cut --delimiter '.' --fields 1
      NEWFILE=${MONTH}_${DAY}.tex
      cp ${FILE} ${NEWFILE}
done

или Вы могли использовать touch команда так, чтобы ls -1t работал бы.

0
28.01.2020, 05:03
  • 1
    +1 для того, чтобы неявно использовать Основание - формат, да, это - ключ - теперь загадка, когда и который сортировка основания использовать с дневником. За и против? –   23.04.2012, 02:16

Теги

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