2017-04-04 125 views
2

逐步替換字符串我有一個將example.txt文件,在其中有一定的字符串HEYIAMHERE出現多次。
我要生成50個TXT文件,例如將example.txt文件,但使用這種模式2017file_01.txt,每次由一個遞增每次重命名輸出文件,並在每個文件全部更換字符串HEYIAMHERE通過文件名本身的輸出文件,無需病程的延長的發生。bash腳本創建多個文件,並在每個文件

example.txt中

Lorem ipsum HEYIAMHERE dolor sit amet 
consectetur adipiscing elit 
Proin ut HEYIAMHERE velit sed mauris sagittis 
Etiam lacus tortor, suscipit eget odio et, 
iaculis egestas risus HEYIAMHERE. 

的結果將是:

2017file_01.txt

Lorem ipsum 2017file_01 dolor sit amet 
consectetur adipiscing elit 
Proin ut 2017file_01 velit sed mauris sagittis 
Etiam lacus tortor, suscipit eget odio et, 
iaculis egestas risus 2017file_01. 

2017file_02.txt

Lorem ipsum 2017file_02 dolor sit amet 
consectetur adipiscing elit 
Proin ut 2017file_02 velit sed mauris sagittis 
Etiam lacus tortor, suscipit eget odio et, 
iaculis egestas risus 2017file_02. 

等。

有人能幫助我嗎?我迷路了,不知道從哪裏開始?我是bash的新手。

input_file=$1 
old=HEYIAMHERE 
new=2017file_ 
for num in $(seq 1 50) 
do 
    sed "s/$old/$new$num/" $input_file > "$new$num.txt" 
done 
+0

而正是不工作?零填充?你爲什麼不這麼說? – Jens

回答

3

您需要在序列-w有你的零包括在內:

input_file=$1 
old=HEYIAMHERE 
new=2017file_ 
for num in $(seq -w 01 50) 
do 
    sed "s/$old/$new$num/" $input_file > "$new$num.txt" 
done 
0

代替SEQ你也可以簡單地使用括號展開的:

for num in {01..50} 
... 
1

以下將採取example.txt的內容並將其複製50次到50個不同的文件中,用每個文件名替換「HEYIAMHERE」。

#!/bin/bash 

var="`less ./example.txt`" 
for NUMBER in {1..50} 
do 
    foo="2017file_$NUMBER" 
    echo ${var//HEYIAMHERE/$foo} > ./$foo.txt 
    echo "...$foo" 
done 
  • VAR = 「less ./example.txt」:捕獲example.txt中的內容作爲一個字符串
  • echo ${var//HEYIAMHERE/$foo} > ./$foo.txt:與名稱文件替換HEYIAMHERE並將其寫入到文件根據。

    要更換所有的比賽: ${string//substring_to_replace/replacement}

    ,以取代第一場比賽: ${string/substring_to_replace/replacement}