Alterar o conteúdo de um arquivo do nome do arquivo

Alterar o conteúdo de um arquivo do nome do arquivo

Quero escrever um script no qual o conteúdo do arquivo seja alterado com base em seu nome de arquivo.

Suponha que eu tenha um arquivo chamado ABC_20161027220153.txte o conteúdo do arquivo seja como

2000|2000_ABC|04|||0000000000||

Quero fazer um script no qual o conteúdo do arquivo seja alterado como abaixo

2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

Como posso fazer isso?

Responder1

Seu script pode usar o nome do arquivo como argumento de linha de comando. Você pode então chamar esse argumento no script com a variável $1 e manipular essa variável da maneira que achar melhor. Por exemplo

#!/bin/bash
# myscript.sh

year=`echo $1 | cut -c 5-8`
month=`echo $1 | cut -c 9-10`
day=`echo $1 | cut -c 11-12`

# Etc...
# Then...

repstr=`echo "$year$month$day|$day.$month.$year $hour.$minute.$second"`

sed -i "s/|||/$repstr/" $1

Então chame o script assim:

./myscript.sh ABC_20161027220153.txt

Responder2

#!/bin/sh

find . -name 'ABC_*.txt' | while read file; do
    res=$( echo "$file" | 
    sed -r 's#\S*_(....)(..)(..)(..)(..)(..).*#\1\2\3|\3.\2.\1 \4.\5.\6#' )

    col4=${res%|*}
    col5=${res#*|}

    sed -r -i.bak '
    s#(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|#\1|\2|\3|'"$col4"'|'"$col5"'|\6|\7|#' \
    "$file"
done

informação relacionada