Bash替代;删除字符串后的所有内容

时间:2010-03-04 10:27:11

标签: bash sed

这可能是一个非常愚蠢的问题,但在Bash中我想做以下替换:

我在一些文件中有这一行:

  

日期:2009年1月12日,天气20°C

我希望将其更改为

  

日期:XXXX

使用sed我想我必须说“在DATE之后开始:”,请删除其余内容并插入“XXXX”。

这种方法是否正常,我该如何进行?

另外,我想学习。如果你在我的情况下你会做什么?在这里问或花一个小时查看手册页?你从哪里开始?

5 个答案:

答案 0 :(得分:3)

尝试:

sed -i 's/^DATE:.*$/DATE: XXXX/g' filename

回答第二个问题取决于你需要多久写一次这样的东西。如果这是一次性事情并且时间有限,那么最好在这里问一下。如果没有,最好通过使用在线教程来学习如何做到这一点。

答案 1 :(得分:1)

while read line
do
    echo "${line/#DATE*/DATE:xxxxx}"
done < myfile

答案 2 :(得分:0)

您也可以使用以下代码

> var="DATE: 12 jan 2009, weather 20ºC" 
 > echo $var | sed -r 's!^(DATE:).*$!\1 XXXX!'

答案 3 :(得分:0)

你可以使用shell

while IFS=":" read -r a b
do
  case "$a" in
   DATE* ) echo "$a:XXXX";;
   *) echo "$a$b" ;;
  esac
done < "file"

或awk

$ cat file
some line
DATE: 12 jan 2009, weather 20ºC
some line

$ awk -F":" '$1~/^DATE/{$2="XXXX"}1' OFS=":" file
some line
DATE:XXXX
some line

答案 4 :(得分:0)

如果您的行不在文件中,则可以不使用sed执行此操作:

var="DATE: 12 jan 2009, weather 20ºC"
echo "${var/DATE:*/DATE:xxxxx}"