Je veux que la boucle tandis que vous ignorez les lignes et lignes vides (vides) contenant #
J'ai essayé, y compris SED -E 'S /#.*$//' -E '/ ^ $ / D' sur le fichier d'entrée et tuyer cela dans la boucle tandis que. Cela n'a pas fonctionné. P>
file=$(sed -e 's/#.*$//' -e '/^$/d' foo.txt) while IFS=: read -r f1 f2 f3 f4; do Command done <"$file"
3 Réponses :
Vous essayez d'ouvrir cette sortie en tant que nom de fichier, ce qui n'est certainement pas certainement. em> exécutez SED dans un sous-groupe et rediriger sa sortie à la place de la boucle. P > pour toute personne intéressée par la manière dont la syntaxe utilisée dans cette réponse fonctionne, voir Wiki Hackers de Bash sur la substitution de processus , et pour la raison pour laquelle cette syntaxe est meilleure que sed ... | Tout en lisant ... code>, voir Bashfaq # 24 . P> < / p>
Utiliser grep -v:
Cela fonctionne certainement, mais le problème n'est pas avec le code code> SED CODE>, c'est comment ils obtiennent leur résultat dans le en lecture code> boucle. Ainsi, cette réponse remplace une pièce de code de travail avec un code de travail différent i>, mais ne résout pas le bug que l'OP est question.
Si vous lisez le titre, alors oui. Mais c'est la première ligne du poteau: "Je veux que la boucle tandis que la boucle d'ignorer les lignes et les lignes vides (vides) contiennent #" OP essayé avec SED, je suggère d'utiliser Grep.
Voici la chose, mais - la chose que l'OP essayé avec SED fonctionne bien i>. Vous suggérez qu'ils changent la partie qui fonctionne déjà, pas la partie qui est cassée. Le bug n'est pas causé par fichier = $ (SED -E 'S /#.*$//' -E '/ ^ $ / d' foo.txt) code> faire autre chose que ce que OP s'attend à ce que cela puisse changer cette ligne sur
fichier = $ (grep -v '# | ^ $') code> ou tout ce qui ne le répare pas.
... au lieu de cela, le problème est causé par <"$ fichier" code> itération sur un fichier nommé par la sortie de i> leur
sed code> SED, ou votre commande
grep code>; Commutation Laquelle de ces deux commandes interchangeables est utilisée de manière non pertinente pour s'ils touchent cette question à moins que l'autre, le code ultérieur soit corrigé.
Vous pouvez utiliser grep code>:
Même grep -e code> n'est pas garanti de supporter
\ s code>; Seule la syntaxe REGEX documentée dans la norme POSIX EERE est disponible sur toutes les plateformes et
\ s code> - comme une autre séquence de backslash-séquence sténographie - n'est pas là. Pour avoir pris en charge la garantie sur toutes les plates-formes POSIX, utilisez
[[: espace:]]] code> à la place.
... Donc, l'utilisation de grep code> ne résout rien (l'ancienne commande
sed code> fonctionne bien) et (avec l'utilisation de
\ s code>) introduit les problèmes de portabilité; L'utilisation d'un tuyau fait i> corrige le problème de l'OP, mais elle la corrige d'une manière qui introduit Différents bugs .