Ändern Sie den Inhalt einer Datei vom Dateinamen

Ändern Sie den Inhalt einer Datei vom Dateinamen

Ich möchte ein Skript schreiben, in dem der Inhalt einer Datei basierend auf ihrem Dateinamen geändert wird.

Angenommen, ich habe eine Datei mit dem Namen ABC_20161027220153.txtund der Inhalt der Datei ist wie folgt

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

Ich möchte ein Skript erstellen, in dem der Dateiinhalt wie unten geändert wird

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

Wie kann ich das machen?

Antwort1

Ihr Skript kann den Dateinamen als Befehlszeilenargument verwenden. Sie können dieses Argument dann im Skript mit der Variable $1 aufrufen und diese Variable beliebig manipulieren. Beispiel:

#!/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

Rufen Sie das Skript dann wie folgt auf:

./myscript.sh ABC_20161027220153.txt

Antwort2

#!/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

verwandte Informationen