我有超过100个文件,超过9000行文字。其中一个文件的预览摘录如下所示:
<productname>kidscar1</productname>
<productid>98</productid>
<productname>kidscar2</productname>
<productcolor>yellow</productcolor>
<productid>101</productid>
<productname>kidscar3</productname>
<productsize>xxl</productsize>
<productcolor>green</productcolor>
<productid>104</productid>
<productname>kidscar4</productname>
<productcolor>bleu</productcolor>
<productsize>xl</productsize>
<producttype>electric</producttype>
<productid>103</productid>
我尝试从不同的产品ID开始更改(重新安排)产品ID,并自动对包含产品ID的下一行进行计数。
我在考虑一个shell脚本解决方案,我可以在for循环中使用它。
**sh idscript.sh oldfile.txt 1000 productid > newfile.txt**
结果:
<productname>kidscar1</productname>
<productid>1000</productid>
<productname>kidscar2</productname>
<productcolor>yellow</productcolor>
<productid>1001</productid>
<productname>kidscar3</productname>
<productsize>xxl</productsize>
<productcolor>green</productcolor>
<productid>1002</productid>
<productname>kidscar4</productname>
<productcolor>bleu</productcolor>
<productsize>xl</productsize>
<producttype>electric</producttype>
<productid>1003</productid>`
我知道可以使用下一个命令替换sed中的整行:
**sed "s/<productid>100</productid>=.*/<productid>=<productid>1000</productid>/g"**
但是我怎样才能使这项工作得到上述结果呢?如果有其他(更简单)的方法来实现这一点,我也喜欢听到它!
答案 0 :(得分:2)
sed是s / old / new就是全部。在这种情况下,您需要一个数字变量来跟踪增量产品,而sed根本不支持变量,所以只需使用awk:
$ awk -v pid=1000 '/<productid>/{sub(/[0-9]+/,pid++)}1' file
<productname>kidscar1</productname>
<productid>1000</productid>
<productname>kidscar2</productname>
<productcolor>yellow</productcolor>
<productid>1001</productid>
<productname>kidscar3</productname>
<productsize>xxl</productsize>
<productcolor>green</productcolor>
<productid>1002</productid>
<productname>kidscar4</productname>
<productcolor>bleu</productcolor>
<productsize>xl</productsize>
<producttype>electric</producttype>
<productid>1003</productid>
答案 1 :(得分:0)
关注awk
也可以帮助您。
awk -v val=1000 '/productid/{sub(/>[0-9]+</,">"val++"<")} 1' Input_file