Załóżmy, że mam plik z liniami
aaa = bbb
Teraz chciałbym je zastąpić:
aaa = xxx
Mogę to zrobić w następujący sposób:
sed „s / aaa = bbb / aaa = xxx / g”
Teraz mam plik z kilkoma wierszami w następujący sposób:
aaa = bbb aaa = ccc aaa = ddd aaa = [coś innego]
Jak mogę wymienić wszystkie to linie aaa=[something]
z aaa=xxx
korzystając sed ?
[something else]
tekst dosłowny, czy to tylko symbol zastępczy? Jaki jest możliwy format rzeczy po znaku równości?Odpowiedzi:
Spróbuj tego:
sed "s/aaa=.*/aaa=xxx/g"
źródło
.*
.g
zamień wszystkie wystąpienia wyrażenia regularnego na zastąpienieMożesz także użyć linii zmiany seda, aby to osiągnąć:
sed -i "/aaa=/c\aaa=xxx" your_file_here
Spowoduje to wyświetlenie wszystkich wierszy, które przejdą
aaa=
test, co oznacza, że wiersz zawiera literyaaa=
. Następnie zastępuje cały wiersz aaa = xxx. Możesz dodać^
na początku testu, aby upewnić się, że otrzymasz tylko te wiersze, które zaczynają się od,aaa=
ale to zależy od Ciebie.źródło
sed
wymagac
odwrotnego ukośnika i nowej linii i nie dołącza nowej linii do wstawionego tekstu, ale możesz użyć na przykład$'/aaa=/c\\\naaa=xxx\n'
.Lubię to:
sed 's/aaa=.*/aaa=xxx/'
Jeśli chcesz mieć pewność, że znak
aaa=
znajduje się na początku linii, zrób to:sed 's/^aaa=.*/aaa=xxx/'
źródło
sed 's/aaa=.*/aaa=\'xxx\'/'
ale to otwiera znak>
zachęty w nowej linii ...Jeśli chcesz użyć,
awk
to też zadziałaawk -F= '{$2="xxx";print}' OFS="\=" filename
źródło
sed -i.bak 's/\(aaa=\).*/\1"xxx"/g' your_file
źródło
To może Ci pomóc:
cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/' > aaa=bbb > aaa=ccc > aaa=ddd > aaa=[something else] ! aaa=bbb aaa=ccc aaa=ddd aaa=xxx
źródło
bbb
,ccc
iddd
to całkiem co OP miał na myśli.