如何使用shell将:50K
和:53B
中的CREDIT
和{:32tyfddf:65 trfdfd :67 ghfdfd :50K:xxxxhh:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50K:yyyyhh:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50K:zzzzz:53B:fg :43:fg $
之间的随机文本替换为{{1}}?
输入
{{1}}
答案 0 :(得分:1)
sed 's/:50K.*:53B/:50KCREDIT:53B/g'
基本的sed替换表达式:
s/what_to_look_for/what_to_replace_with/
g
表示“为线上所有找到的模式执行此操作”(您可能希望跳过该模式)。
<强>用法:强> 您可以通过让它从stdin中读取来使用sed:
cat path/to/your_text_file | sed 's/:50K.*:53B/:50KCREDIT:53B/g'
或通过将要替换的文本文件作为参数提供
sed 's/:50K.*:53B/:50KCREDIT:53B/g' path/to/your_text_file
每个人都会将替换版本打印到stdout。也不会修改原始文件。
答案 1 :(得分:1)
使用Perl:
perl -pi.bak -e 's/(\:50K).+?(\:53B)/${1}CREDIT${2}/g;' input_file
基本用法:
s/replace_this/with_this/g;
(\:50K)
部分中的{p> (\:53B)
和replace this
位于括号内,因为这些是所谓的捕获组。您可以在${1}
部分,${2}
中将这些捕获组称为\1
和\2
(或with_this
和CREDIT
)作为字面替换中间的任何内容(.+?(\:53B)
- 表示任何字符,无论出现多少次,直到出现53B)。
:
被转义,因为它是正则表达式中的元字符。
文件备份将保存到input_file.bak
使用您的输入,输出为:
$ cat input_file
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
希望它有所帮助。
答案 2 :(得分:1)
使用awk
awk -F":50K|:53B" '{$2=":50KCREDIT:53B"}8' OFS="" file
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
awk '{sub(/:50K.*:53B/,":50KCREDIT:53B")}8' file
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
gnuawk
awk '{print gensub(/(:50K).*(:53B)/,"\\1CREDIT\\2","g")}' file
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $
{:32tyfddf:65 trfdfd :67 ghfdfd :50KCREDIT:53B:fg :43:fg $