web-dev-qa-db-fra.com

Comment puis-je supprimer du texte avant un délimiteur sous Linux?

J'ai besoin de supprimer du texte d'une ligne avant le délimiteur.

Par exemple:

(123434): hello::{Apple,orange,mango}.

J'ai besoin de supprimer le texte avant le premier :. c'est à dire. (123434).

Y a-t-il une commande sous Linux d'exécuter cette tâche?

17
user80538

Cette commande sed devrait faire le tour. La commande suivante écrasera le fichier:

sed -i 's/^[^:]*:/:/' file

Pour simplement imprimer la sortie, supprimez le -i drapeau. Pour mettre la sortie dans un nouveau fichier, supprimez le -i Drapeau et rediriger la sortie:

sed 's/^[^:]*:/:/' file > new_file
14
drs

Vous pouvez utiliser cut:

echo '(123434): hello::{Apple,orange,mango}.' | cut -d: -f2-
15
Joseph R.

Vous pouvez le faire avec une instruction assez simple Bash:

mytext="(123434): hello::{Apple,orange,mango}."

echo ${mytext#*)}

Cela imprimera : hello::{Apple,orange,mango}.. Vous pouvez réduire les préfixes et les suffixes de la même manière. De plus, les définitions de préfixes et de suffixes peuvent contenir des caractères génériques.

Couper le préfixe - Jusqu'à un premier match de caractères génériques préfixe: ${variable#prefix}

Couper le préfixe - Jusqu'au dernier préfixe Correspondance générique: ${variable##prefix}

CUT suffixe - Jusqu'au premier suffixe Suffix Wildcard Match: ${variable%suffix}

Cut suffixe - jusqu'à la dernière combinaison de Suffix Wildcard: ${variable%%suffix}

On n'aura peut-être pas peur de la première vue, voir l'exemple suivant:

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

Dans le dernier exemple, le motif ne correspond pas, alors rien n'est coupé.

5
user77422