将 x/ 添加到行前面,其中 x 是每行上的变量

将 x/ 添加到行前面,其中 x 是每行上的变量

我想$x/从格式为$x-xyzxyz是要忽略的文本和数字的混合)的数据中添加。

示例数据

AB-10C
CD-02E

输出

AB/AB-10C
CD/CD-02E

如何将变量描述为连字符之前的文本?我的想法是:

define $x = # don't know how to do that
## and then somehow use sed to prepend
sed -i s/$/$x/ file
# I don't know if sed can handle variables though - the above one liner is from Googling

答案1

这是一个快速而肮脏的awk版本:

awk -F- '{print $1"/"$0}' input_file > output_file

它的作用是用作-字段分隔符,并打印第一列(即第一个 之前的所有内容-),然后打印 a /,然后打印整个原始行。

做同样事情的一种方法sed是:

sed -e 's;^\([^-]*\)\(.*\);\1/\1\2;' input_file > output_file

(但这很难读。)

如果你想简单地做到这一点bash,你可以使用字符串操作:

$ foo=AB-10C
$ prefix=${foo%%-*}
$ echo ${prefix}/${foo}
AB/AB-10C

while read如果数据来自文件,则在循环或类似的情况下使用它。

答案2

这可能对你有用:

echo -e "123,AB-10C,4\n567,CD-02E,8" |
sed 's|\([^,]*\)-.*|\1/&|'
123,AB/AB-10C,4
567,CD/CD-02E,8

相关内容