{"id":116043,"date":"2014-11-10T17:26:26","date_gmt":"2014-11-10T16:26:26","guid":{"rendered":"http:\/\/www.apfelnews.de\/?p=116043"},"modified":"2014-11-10T17:26:26","modified_gmt":"2014-11-10T16:26:26","slug":"suche-und-ersetze-in-vielen-dateien-am-schnellsten-mit-kommandozeile","status":"publish","type":"post","link":"https:\/\/www.apfelnews.de\/kategorie\/tipps-tricks\/suche-und-ersetze-in-vielen-dateien-am-schnellsten-mit-kommandozeile\/","title":{"rendered":"Suche und Ersetze in vielen Dateien: Am schnellsten mit Kommandozeile"},"content":{"rendered":"
Manchmal kommt es vor, dass man ein bestimmtes Wort in mehreren Dateien \u00e4ndern muss. Dies ist m\u00fchsam, besonders dann, wenn es viele Dateien betrifft. Mithilfe der Kommandozeile kann man dies in Windeseile l\u00f6sen. Wir zeigen euch wie.<\/p>\n
Wer gerne bastelt, sei es an Webseiten, anderem Quellcode oder vielleicht auch mit sonstigem Text, steht manchmal vor dem Problem, dass ein Fehler enthalten ist. Dank Funktionen wie Copy & Paste ist der Fehler dann konsequenterweise in jeder Datei enthalten und soll korrigiert werden. Doch was, wenn die Anzahl der Dateien in die hunderte geht? Dann hilft die Kommandozeile.<\/p>\n
Mithilfe der Spotlight-Suche l\u00e4sst sich das Terminal finden. Es handelt sich hierbei um die Kommandozeile von OS X und damit einem Zugang zur UNIX-Schnittstelle des Apple-Betriebssystems. Wenn man das Vorkommen eines Fehlers in allen Dateien beheben will, muss man zun\u00e4chst in den Ordner wechseln, wo die Dateien enthalten sind. Sagen wir in unserem Beispiel liegt ein Ordner mit dem Namen „fixme“ auf dem Schreibtisch:<\/p>\n
Nun wird es spannend, denn im n\u00e4chsten Schritt ersetzen wir alle Vorkommen von „Afpelnews“ durch „Apfelnews“:<\/p>\n Was bedeutet das? find . -name „*.htm“ findet alle Dateien mit der Endung .htm und beginnt dabei im aktuellen Ordner (das sagt der Punkt aus). Der Parameter -print besagt, dass das Ergebnis als Dateiliste ausgegeben werden soll. Ausgegeben werden alle Dateinamen, die auf die Suchanfrage passen. Dabei werden auch Unterordner durchsucht. Der senkrechte Strich ist ein „Pipe“, alte DOS-Hasen kennen vielleicht auch die \u00dcbersetzung „Verkettungszeichen“. Dieses Zeichen bedeutet, dass das Ergebnis aus Befehl 1 an Befehl 2 (nach dem Pipe) weitergeleitet wird. Das Tool xargs kommt mit Zeilenumbr\u00fcchen zurecht und wird jede Zeile als Parameter an den Rest des Befehls weiterleiten. sed -i 's\/Afpelnews\/Apfelnews\/g‘ ist der Stream Editor, der in jedem unix-\u00e4hnlichen Betriebssystem, also OS X, Linux, BSD usw. zur Verf\u00fcgung steht. Der Parameter -i sagt aus, dass die Dateien direkt bearbeitet werden (normalerweise gibt sed das Ergebnis nur aus). Danach kommt die Sequenz s\/Afpelnews\/Apfelnews\/g. Das bedeutet, dass sed ersetzen soll (s f\u00fcr „substitution“). Gesucht wird nach Afpelnews, ersetzt wird durch Apfelnews. Das „g“ sagt aus, dass alle Vorkommen in einer Zeile ersetzt werden sollen. Ohne das g wird nur der erste Treffer in jeder Zeile erfasst.<\/p>\n Wie so h\u00e4ufig gibt es ein paar kleine Einschr\u00e4nkungen, auf die wir kurz hinweisen wollen:<\/p>\n Manchmal kommt es vor, dass man ein bestimmtes Wort in mehreren Dateien \u00e4ndern muss. Dies ist m\u00fchsam, besonders dann, wenn es viele Dateien betrifft. Mithilfe der Kommandozeile kann man dies in Windeseile l\u00f6sen. Wir zeigen euch wie.<\/p>\n","protected":false},"author":4393,"featured_media":68428,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[145],"tags":[],"class_list":["post-116043","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tipps-tricks"],"jetpack_publicize_connections":[],"acf":[],"yoast_head":"\ncd ~\/Desktop\/fixme<\/code><\/p>\n
find . -name \"*.htm\" -print | xargs sed -i 's\/Afpelnews\/Apfelnews\/g'<\/code><\/p>\n
\n