簡體   English   中英

如何在變量中獲取sed或awk命令

[英]How to get sed or awk commands in a variable

我正在嘗試將文件名從prod.test.PVSREGPLUS20170915-6777.DAT.gpg更改為PVSREGPLUS20170915-0003.DAT.gpg

我用這個

DTE=$(date +%I);ls  prod.test* |cut -f 3,4,5 -d .|sed "s/\-/-00$DTE/" |cut -c 1-23,28-35

我的問題是我在shell腳本中需要此命令

"#! /bin/bash

DTE=$(date +%I)

newfile=$(ls  prod.test* |cut -f 3,4,5 -d .|sed "s/-*./$DTE/"|cut -c 1-23,28-35

sed無法執行擴展,awk能夠執行此操作嗎? 任何幫助將不勝感激。 謝謝

最簡單的方法是在全局模式上進行for循環,然后使用參數擴展來刪除前綴

prefix="prod.test."
hour=$(date '+%I')
for f in "$prefix"*; do 
    new=$( echo "${f#$prefix}" | sed 's/-[[:digit:]]\+/-00'"$hour"'/' )
    echo mv "$f" "$new"
done

我們真的不需要sed:擴展模式和更多參數擴展

shopt -s extglob
for f in "$prefix"*; do 
    new=${f#$prefix}
    new=${new/-+([0-9])/-00$hour}
    echo mv "$f" "$new"
done

如果看起來不錯,請刪除“ echo”。

或者,按照注釋中的建議使用perl rename

rename -v -n 's/prod\.test\.//; use Time::Piece; s{-\d+}{"-00" . (localtime)->strftime("%I") }e' prod.test.*

如果看起來不錯,請刪除“ -n”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM