Muszę usunąć tekst z linii przed separatorem.
Na przykład:
(123434): hello::{apple,orange,mango}.
Najpierw muszę usunąć tekst :
. tj (123434)
.
Czy w Linuksie jest jakieś polecenie do wykonania tego zadania?
Muszę usunąć tekst z linii przed separatorem.
Na przykład:
(123434): hello::{apple,orange,mango}.
Najpierw muszę usunąć tekst :
. tj (123434)
.
Czy w Linuksie jest jakieś polecenie do wykonania tego zadania?
Odpowiedzi:
To sed
polecenie powinno załatwić sprawę. Następujące polecenie zastąpi plik:
sed -i 's/^[^:]*:/:/' file
Aby tylko wydrukować wynik, usuń -i
flagę. Aby umieścić dane wyjściowe w nowym pliku, usuń -i
flagę i przekieruj dane wyjściowe:
sed 's/^[^:]*:/:/' file > new_file
Możesz to zrobić za pomocą dość prostej instrukcji Bash :
mytext="(123434): hello::{apple,orange,mango}."
echo ${mytext#*)}
To zostanie wydrukowane : hello::{apple,orange,mango}.
. Możesz wycinać przedrostki i przyrostki w podobny sposób. Ponadto definicje prefiksów i sufiksów mogą zawierać symbole wieloznaczne.
Wytnij prefiks - dopasuj do znaku wieloznacznego pierwszego prefiksu: ${variable#prefix}
Wytnij prefiks - dopasowanie do znaku wieloznacznego do ostatniego prefiksu: ${variable##prefix}
Wytnij sufiks - do pierwszego dopasowania symboli wieloznacznych: ${variable%suffix}
Wytnij przyrostek - do ostatniego dopasowania wieloznacznego przyrostka: ${variable%%suffix}
Na pierwszy rzut oka może wydawać się niejasny, patrz następujący przykład:
mytext="xAxBxAxBx"
echo ${mytext#*A} # will print: xBxAxBx
echo ${mytext##*A} # will print: xBx
echo ${mytext%B*} # will print: xAxBxAx
echo ${mytext%%B*} # will print: xAx
echo ${mytext%%C*} # will print: xAxBxAxBx
W ostatnim przykładzie wzór nie pasuje, więc nic nie jest wycinane.
echo ${mytext#*:}:
. To odpowiednio obsłuży linie takie jak (123)(434): hello::{apple,orange,mango}.
i 123434: hello::{apple,orange,mango}
.
sed
lubawk