2016-11-17 95 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延長正則表達式選項