簡體   English   中英

如何使用sed更改awk變量

[英]how to alter an awk variable with sed

我有一個bash命令,該命令生成需要更改文件名的文件列表。 所以我在想使用這樣的東西:

mycommand | awk {mv $1 altered$1}

問題是第二個$ 1應該更改為sed一些正則表達式。 我如何將sed應用於第二個參數?

我試過$()和|,但是不起作用。

我也試過

awk '{print $1 sed "s/[^A-Za-z0-9._-]/_/g" <<< $1}'
awk: cmd. line:1: Unexpected token

mv不是awk命令。 您需要外殼。 嘗試:

mycommand | while IFS= read -r f; do mv "$f" "${f//[^A-Za-z0-9._-]/_}"; done

假定文件名以換行符分隔。 除非文件名包含換行符作為其名稱的一部分,否則可以這樣做。 為了獲得更高的可靠性,應修改mycommand和while循環以使用NUL作為分隔符。

這個怎么運作:

  • while IFS= read -rf; do

    這將啟動一個循環,依次將每一行讀入變量f

    IFS=告訴外殼程序在一行上保留前導或尾隨空格。 如果mycommand產生多余的前導或尾隨空格,則將其刪除。

    -r告訴外殼程序將輸入中的反斜杠保持原樣。

  • mv "$f" "${f//[^A-Za-z0-9._-]/_}"

    這將重命名文件。

  • done

    這表示while循環結束。

您是否接受subshel​​l? 如果是,則可以按照以下簡單方法進行操作:

mv `mycommand | awk '{print $1}'` {altered$1}

使用rename (始終通過必需的 util-linux軟件包安裝在基於Debian的發行版中):

rename 's/^/altered/' $(mycommand)

暫無
暫無

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

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