我需要找到所有以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和正则表达式。我没有找到这个特例。
答案 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