我想$x/
从格式为$x-xyz
(xyz
是要忽略的文本和数字的混合)的数据中添加。
示例数据
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