2016-11-17 99 views
0

IP文件修改文件内容 - 1.txt如何使用SED

$ cat 1.txt 
'&1' 
'&2' 
'&3' 

,如果我想的O/P为使用SED(或任何与此有关的命令)

:1 
:2 
:3 

,如何我能实现吗?

+0

什么是文件的内容? –

+0

所以,你想从每行中提取数字,并在打印时在数字前添加':'? – Sundeep

+0

I/P 星期一{'&1','早餐','早餐'} 星期二{'&2','午餐','午餐'} 星期三{'&3','晚上','晚餐'} 周四{'&4','晚上','晚餐'} ** O/P ** 星期一{:1,'早餐','早餐'} 星期二{:2,'午餐' } 星期三{:3,'晚上','晚餐'} 星期四{:4,'Night','Dinner'} – Guru24

回答

0
awk '{gsub(/'"^'"'|'"'$"'/,"");gsub(/&/,":")}1' input 
:1 
:2 
:3 

这里,awkgsub功能是用来取代单引号空白,另一GSUB被用来替换&:1表示在awk中打​​印。

+0

这有效,请你解释它是如何工作的。提前致谢。 ,因为无论我分享了什么输入,它都在 – Guru24

+0

@ Guru24的中间,在这种情况下,你应该给出一个更好的输入样本,因为很容易假设这些是唯一的内容..另请参阅https://stackoverflow.com/help/mcve – Sundeep

+2

更新的答案与一些解释。同意@Sundeep,如果您对此不满意,需要更多关于输入和预期输出的清晰度。 –

0

您可以通过使用以下2个命令来获得您的o/p。 sed -e'/ 1/b'-e'/ 2/b'-e'/ 3/b'-ed 1.txt 或 - > gsed'/ 1:2: 3 /!d'1.txt

0

这样好吗?

sed -e 's/.*[^0-9]\([0-9]\+\)[^0-9]*$/:\1/' 1.txt 

:1 
:2 
:3 
0
$ cat 1.txt 
Monday {'&1', 'Morning', 'Breakfast'} 
Tuesday {'&2', 'Noon', 'Lunch'} 
Wednesday {'&3', 'Evening', 'Supper'} 
Thursday {'&4', 'Night', 'Dinner'} 

$ sed -E 's/\x27&([0-9]+)\x27/:\1/' 1.txt 
Monday {:1, 'Morning', 'Breakfast'} 
Tuesday {:2, 'Noon', 'Lunch'} 
Wednesday {:3, 'Evening', 'Supper'} 
Thursday {:4, 'Night', 'Dinner'} 
  • \x27&匹配单引号和&(参见ASCII set供参考)
  • ([0-9]+)捕获位数背面引用
  • \x27匹配单引号
  • :\1:替换匹配的模式并捕获数字
  • 注:一些sed版本使用-r代替-E延长正则表达式选项