Изменить формат даты с помощью sed или awk в файле

Я только что придумал этот скрипт

while [ $# -gt 0 ]; do

   if [[ $1 == *"--"* ]]; then
        v="${1/--/}"
        declare $v="$2"
   fi

  shift
done

передайте его как my_script --p_out /some/path --arg_1 5, а затем в скрипте вы можете использовать $arg_1и $p_out.

2
01.11.2019, 20:54
3 ответа

Поскольку все, что вы делаете, это добавляете два дефиса и отбрасываете несколько дополнительных символов, в dateособой необходимости нет.

$ sed -Ee 's/(Last Password Change: )(....)(..)(..).*Z/\1\2-\3-\4/' < foo.txt
...
  Name: cust foo
  mail: cust.foo@example.com
  Account Lock: FALSE
  Last Password Change: 2017-07-21
...

Для более строгого шаблона точки (, соответствующие любому символу ), можно заменить на [0-9], чтобы соответствовать только цифрам. \1и т. д. при замене, конечно, расширяются до того, с чем когда-либо совпадали шаблоны в скобках.

8
27.01.2020, 21:49

Мне удалось сделать это с помощью следующей awkкоманды:

awk -F\: '$1 ~ /Last Password Change/{ OFS=":"; $2 = substr($2, 1, 5)"-"substr($2, 6, 2)"-"substr($2, 8, 2) }1'

Используя :в качестве разделителя полей, если первый столбец соответствует Last Password Change, мы будем использовать substrдля извлечения года, месяца и даты и замены второго столбца этими значениями в желаемом формате.

4
27.01.2020, 21:49

Это мое предложение:

sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})[0-9]{6}Z/\1-\2-\3/' file

Выход:

  Name: cust foo
  mail: cust.foo@example.com
  Account Lock: FALSE
  Last Password Change: 2017-07-21
----------------------------------------
  Name: cust xyz
  mail: cust.xyz@example.com
  Account Lock: TRUE
  Last Password Change: 2018-12-10
----------------------------------------
  Name: cust bar
  mail: cust.bar@example.com
  Account Lock: FALSE
  Last Password Change: 2017-04-12
----------------------------------------
  Name: cust abc
  mail: cust.abc@example.com
  Account Lock: FALSE
  Last Password Change: 2019-10-30
----------------------------------------
4
27.01.2020, 21:49

Теги

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