Regexp, как проверить этот тип шаблона - PullRequest
0 голосов
/ 28 июня 2018

Я постараюсь объяснить лучше. Я также проверил комментарии, но все еще не повезло с заменой.

grep part возвращает true, потому что регулярное выражение в порядке. Но sed, не заменяет

Это скрипт:

#!/bin/bash
# All of these:
# FILE1: &VAR1 = 1111
# FILE1: &VAR1     =     '1111'
# FILE1: &VAR1  =  1111;
# With:
# &VAR2 = 'NEW';
#
# SEARCH STRING
LAREXP="&VAR1\s*=\s*'?[1]{4}'?"
# REPLACE STRING
LACADE="&VAR2 = 'NEW'";
# ALL FILES WITH NAME STARTING WITH ZZ
for f in /home/u028619/zz*; do
# SEARCH IF THE SEARCH STRING EXISTS, THIS IS ALWAYS TRUE, OK
    if grep -qE "$LAREXP" "$f"; then
# REPLACE THE STRING, THIS IS WHATS DOESN'T WORK
        sed -i "s/$LAREXP/$LACADE/g" "$f"
    fi
done
#
exit 0

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это регулярное выражение будет гарантировать, что точка с запятой и пробел являются необязательными, а кавычки совпадают (если он начинается с одинарного / двойного, он будет совпадать с соответствующим в конце):

/&VAR1\s*=\s*(['"])?1{4}\1;?/
0 голосов
/ 28 июня 2018

Спасибо @Аарон! Я немного прочитал и думаю, что понял:

/&VAR1\s*\=\s*\'VALUE\'\;/

@ Трипли, спасибо. Это работало с Javascript в онлайн-тестере, я перешел на Unix и попробовал, но это не работает. Я изменил VALUE на поиск по номеру 1111. Любая помощь?

grep "\&VAR1\s*\=\s*'[1]{4}'\;"

РЕДАКТИРОВАТЬ: Готово, [] и {} являются расширителем регулярного выражения, поэтому это работает:

grep -E "\&VAR1\s*\=\s*'[1]{4}'\;"
...