Замена Баша;удалить все после строки - PullRequest
1 голос
/ 04 марта 2010

Это, вероятно, очень глупый вопрос, но в Bash я хочу сделать следующую замену:

У меня есть в некоторых файлах строка:

ДАТА: 12 января 2009 г., погода 20 ° C

и я хочу изменить его на

ДАТА: XXXX

Используя sed Я думаю, мне пришлось сказать "начиная с" DATE: ", пожалуйста, удалите остальные и вставьте" XXXX ".

Этот подход в порядке и как я могу его выполнить?

Кроме того, я хочу учиться. Если бы вы были в моей ситуации, что бы вы сделали? Спросите здесь или проведите один час, просматривая справочную страницу? С чего бы начать?

Ответы [ 5 ]

3 голосов
/ 04 марта 2010

Попробуйте:

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

Ответ на ваш второй вопрос зависит от того, как часто вам нужно писать такие вещи. Если это одноразовая вещь и время ограничено, лучше спросить здесь. Если нет, то лучше узнать, как это сделать, используя онлайн-учебник.

1 голос
/ 06 марта 2010
while read line
do
    echo "${line/#DATE*/DATE:xxxxx}"
done < myfile
0 голосов
/ 04 марта 2010

Если вашей строки нет в файле, вы можете сделать это без sed:

var="DATE: 12 jan 2009, weather 20ºC"
echo "${var/DATE:*/DATE:xxxxx}"
0 голосов
/ 04 марта 2010

Вы можете использовать оболочку

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
0 голосов
/ 04 марта 2010

Вы также можете использовать следующий код

> var="DATE: 12 jan 2009, weather 20ºC" 
 > echo $var | sed -r 's!^(DATE:).*$!\1 XXXX!'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...