大家好我正在尝试替换从文件的某个部分开始的所有空格。我试图这样做,但我不能让它在某个部分开始。
我尝试了这个sed "s/\s/_/g" < file.txt > file_1.txt
,但所有空格都变成了下划线。
在file.txt
内:
My Name
Favorite Food
Favorite Color
Time is gold
List of Dogs:
Shi ba Inu
Sibe rian Husky
Labra dor Retriever
Ger man Shep herd
Bull Doge
Be agle
chi hua hua
Bull Ter rier
预期file_1.txt
:
My Name
Favorite Food
Favorite Color
Time is gold
List of Dogs:
Shi_ba_I_nu
Sibe_rian_Husky
Labra_dor_Retriever
Ger_man_Shep_herd
Bull_Doge
Be_agle
chi_hua_hua
Bull_Ter_rier
答案 0 :(得分:1)
如果您希望替换仅在“狗列表”之后发生,请尝试
sed -e '1,/List of Dogs:/b' -e 's/\s/_/g'
命令b
表示“分支”(到脚本的末尾,即绕过替换),地址范围指定第一行与匹配正则表达式的第一行的此操作。
答案 1 :(得分:1)
如果您希望仅在:
之后进行替换,请使用以下内容:
sed -r '/:/,$ s/\s/_/g;' file.txt > file_1.txt
替换仅限于包含:
的行,直到文件$
的结尾。
答案 2 :(得分:1)
鉴于您的初始输入file.txt
:
My Name
Favorite Food
Favorite Color
Time is gold
List of Dogs:
Shi ba Inu
Sibe rian Husky
Labra dor Retriever
Ger man Shep herd
Bull Doge
Be agle
chi hua hua
Bull Ter rier
你可以试试这个:
$ sed '/List of Dogs/,$s/\s/_/g;s/List_of_Dogs/List of Dogs/g' file.txt
结果如何:
My Name
Favorite Food
Favorite Color
Time is gold
List of Dogs:
Shi_ba_Inu
Sibe_rian_Husky
Labra_dor_Retriever
Ger_man_Shep_herd
Bull_Doge
Be_agle
chi_hua_hua
Bull_Ter_rier
sed
命令可以按;
range start,range end
形式。查找List of Dogs
开头的行。 $
指定此语法的range end
部分的最后一行文件$s/\s/_/g
List_of_Dogs:
,因此第二个命令s/List_of_Dogs/List of Dogs/g
只是将其转换回来的解决方法答案 3 :(得分:0)
你有答案但你不知道=)
你说你想要替换这些空格,但你还没有说要用它们替换它们。我怀疑,你想用无空格字符替换它们,对吗?
sed "s/ //g" $original_file > $new_file
或使用\ s引用空格也应该有效
sed "s/\s//g" $original_file > $new_file
语法基本上是
sed "s/find_this/replace_with/g" $original_file > $new_file
我希望有帮助...
答案 4 :(得分:0)
保持简单,明显,健壮,便携等,只需使用awk:
$ awk 'found{gsub(/[[:space:]]/,"_")} /:/{found=1} {print}' file
My Name
Favorite Food
Favorite Color
Time is gold
List of Dogs:
Shi_ba_Inu
Sibe_rian_Husky
Labra_dor_Retriever
Ger_man_Shep_herd
Bull_Doge
Be_agle
chi_hua_hua
Bull_Ter_rier