使用 sed 或其他命令向作为点后文本模式的行添加前缀

使用 sed 或其他命令向作为点后文本模式的行添加前缀

我正在尝试使用 sed 或其他命令编辑 linux 文件。

这是我的文件:

first.xlsx
second.txt
third.ksh

我想将文件 t 更改为:

xlsx/first.xlsx
txt/second.txt
ksh/third.ksh

因此,点后的文本应添加到行首,后跟正斜杠。

我可以使用什么 sed 或其他命令来进行此更改?

答案1

您可以通过以下方式进行此更改

sed 's|.*\.\(.*\)|\1/&|'

它用作|分隔符,因此我们可以用作/文字字符而不转义它。要t就地更改文件 ,请使用

sed -i 's|.*\.\(.*\)|\1/&|' t

答案2

使用awk而不是sed

awk -F . '{ printf "%s/%s\n", $NF, $0 }' file

或者,用作/输出字段分隔符,

awk -F . -v OFS=/ '{ print $NF, $0 }' file

它们被.视为字段分隔符并输出最后一个此类字段 ( $NF),后跟斜杠和原始行 ( $0)。

使用最新版本的 GNU awk,您可以使用以下命令就地修改文件

awk -i inplace -F . '{ printf "%s/%s\n", $NF, $0 }' file

相关内容