替换UNIX中某个部分的所有空格

时间:2016-03-06 16:48:58

标签: unix sed

大家好我正在尝试替换从文件的某个部分开始的所有空格。我试图这样做,但我不能让它在某个部分开始。

我尝试了这个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

5 个答案:

答案 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