使用grep查找特定行 - 将该行传递给sed - 编辑位置x处的字符

时间:2014-06-19 17:27:57

标签: regex bash shell sed grep

我需要找到所有以1开头并替换位置14的行。 我需要找到所有以5开头并在第41位替换的行。 - et.c。

我想替换字符串的所有出现:

sed 's/string/replace/g' - 

字符串可以改变,我真的只想替换第一个位置 - 这个位置总是一样,发生在第14位,因此:

sed 's/string/replace/14'

不同的行不需要替换此字符。我只想替换字符位置,如果它的行以某个代码开头。

此字符串出现在以1开头的行的第14位 该字符串出现在以5开头的行上的第41位 该字符串出现在以8

开头的行上的第45位

找到字符串

grep -E '^1' $DEST/$FILE_NAME$DATE.txt

因此:

grep -E '^1' $DEST/$FILE_NAME$DATE.txt | sed 's/./'$CODE'/14'
grep -E '^5' $DEST/$FILE_NAME$DATE.txt | sed 's/./'$CODE'/41'
grep -E '^8' $DEST/$FILE_NAME$DATE.txt | sed  's/./'$CODE'/45'

上面实际上并没有写入文件,但似乎做了我想做的事。

grep -E '^8' $DEST/$FILE_NAME$DATE.txt | sed  -i 's/./'$CODE'/45' $DEST/$FILE_NAME$DATE.txt

上面写入文件,但忽略了grepped行,并替换每行第45位的字符。

此外,可以连接多个类似的文件 - 因此我需要找到以1开头并替换位置14的所有行。 我需要找到所有以5开头并在第41位替换的行。 - et.c。

提前抱歉,如果很容易被其他帖子回答 - 可能是使用awk和正则表达式。我没有找到这个特例。

1 个答案:

答案 0 :(得分:0)

sed可以更改与正则表达式匹配的行,因此不需要grep。先匹配表达式,然后是替换表达式:

sed -i "/^1/ s/./$CODE/14" $DEST/$FILE_NAME$DATE.txt 
sed -i "/^5/ s/./$CODE/41" $DEST/$FILE_NAME$DATE.txt 
sed -i "/^8/ s/./$CODE/45" $DEST/$FILE_NAME$DATE.txt 

Selecting lines with sed (Addresses)