Wie in txt-datei am ende jeder zeile feste zeichen hinzufügen?

Baster

Neu angemeldet
Registriert
5 Apr. 2015
Beiträge
68
Hallo Zusammen

Ich würde gerne einen Batch / shell script schreiben der:

1. In einer Textdatei alle Leerzeilen löscht.
Die Textdatei beinhaltet Pfade also: /path/to/folder/bla/bla
2.ich möchte in jeder zeile am ende ein "/index.php" hinzufügen (ohne ")
Vielen Danke für eure Antwort

Gruss
 
Ich würde das mit sed machen:

[src=bash]sed '/^$/d' textmitleerzeilen.txt > textohneleerzeilen.txt
sed 's/$/\/index\.php/' textohneleerzeilen.txt > textohneleerzeilenmitindexphpamende.txt[/src]

Oder kombiniert:

[src=bash]sed '/^$/d; s/$/\/index\.php/' textmitleerzeilen.txt > textohneleerzeilenmitindexphpamende.txt[/src]

(ungetestet) funktioniert.
 
Ich glaube er meint Windows Batch! :unknown:

Ist mir aber gerade auch erst aufgefallen :D

Nun denn, "es funktioniert" was ich zusammengeschuster/kopiert hab... ;)
$skript.sh eingabe.txt ausgabe.txt

[src=bash]#!/bin/bash

#Based on: http://mywiki.wooledge.org/DontReadLinesWithFor

IFS=$'\n';
set -f;

INFILE=${1};
OUTFILE=${2};
LINE=0;

for i in $(<$INFILE); do
if [ $LINE -eq 0 ]; then
echo >$OUTFILE "$i/index.php";
let LINE=LINE+1;
else
echo >>$OUTFILE "$i/index.php";
fi;

done;

set +f;
unset IFS;[/src]
 
Eigentlich sollte mal jemand jetzt ein PowerShell Skript hier präsentieren ;)
 
[src=powershell]Get-Content c:\quelle.txt | ForEach-Object {if($_.trim()){$_ = "$_\index.php" | Out-File c:\ziel.txt -Append}}[/src]
 
Und seit wann ist Powershell in Standard Windowsinstallationen enthalten?

Warum nicht PHP, das läuft ja offenbar eh schon?

[src=php]$stuff = "you want to append to each line";
$file = file("input.file");

$new_file;
foreach($file as $row)
{
$new_file .= $row.$stuff;
}

file_put_contents("path/to/new.file", $new_file);
[/src]

Bin gerade unterwegs daher nicht getestet.
Edit:
Man sollte wohl vorher die Zeilenumbrüche entfernen und nachher wieder dran machen.
 
Geht auch problemlos in Vim:

[src=bash]:%g/^$/d
:%s/$/\/index.php/[/src]
Der erste Befehl löscht alle Leerzeilen, der 2. fügt das /index.php ans Ende hinzu.

Oder mit sed halt:
[src=bash]sed "/^$/d;s/$/\/index.php/" -i deine_datei.php[/src]
Kannst du dann natürlich auch rekursiv auf ganze Verzeichnisse anwenden.

(Grad gelesen, dass das phre4k schon gepostet hat. Irgendwie sind wir uns in manchen Sachen zu ähnlich.)
 
  • Thread Starter Thread Starter
  • #10
nochmals vielen Dank für eure hilfe

Bei mir Funktioniert es mit sed nicht

die datei wird so erzeugt

[src=text]/path/to/folder/bla/bla

/index.php
/path/to/folder/bla/bla

/index.php

[/src]

ich bin kein fan von PowerShell Da es nicht ohne weiteres überall Funktioniert

evtl. hat noch jemand lust ein batch file zu posten

LG
 
  • Thread Starter Thread Starter
  • #12
naja standardmäßiglt ist die Ausführung von PowerShell Skripten ab Windows 7 aus Sicherheitsgründen deaktiviert und muss evtl vorher Aktiviert werden (umständlich wie ich finde )
 
du kannst einfach rechtsklick >ausführen als powershell sagen - dann wirst du gefragt ob du es ausführen möchtest, ein klick auf y /j und es wird ausgeführt.
Es ist "nur" ein zusätzlicher Schutz aktiv der ein versehentliches Ausführen von Umfangreichen Scripten verhindern soll da man damit erheblichen Schaden anrichten kann... lass mal in deinem Script nicht eine Zeichenfolge anfügen sondern massenweise Dateien für immer löschen.

Wer den zusätzlichen Schutz nicht möchte startet die powershell als Admin und deaktiviert den Schutz über "set-executionpolicy unrestricted" damit geht es für immer.

Es ist nicht deaktiviert - nur erschwert.

Im Firmenumfeld lässt es sich auch für alle dauerhaft aktivieren.
 
Bei mir Funktioniert es mit sed nicht
Das ist schade. Vielleicht hättest du noch ein paar Angaben posten sollen.

Benutzt du Windows oder ein richtiges Betriebssystem?

Powershell ist schon ganz ok. Du kannst das Script von DrFuture ja auch in der Powershell aufrufen. Damit ersparst du Dir die umständlichen Berechtigungsprobleme. Mit der CMD geht das bestimmt auch irgendwie. Allerdings ist die Syntax der CMD so grottig, dass man das eigentlich nicht darin machen will.
 
Eventuell "\r\n" als Delimeter von Zeilen und nicht "\n" oder "\r" allein? Die müssten abgetrennt und danach angefügt werden, so werden sie wohl zur Zeile angefügt, daher die Verschiebung.
 
Zuletzt bearbeitet:
verwende die Bash (Shell)
Lade die Datei mal bitte im Vim und gib dann ein (nicht im Eingabemodus sondern im "Normalmodus"):
Code:
Expand Collapse Copy
:set list
Damit zeigt er dann die unsichtbaren Steuerzeichen an.

Das Fileencoding kannst du Dir anzeigen lassen mit:
Code:
Expand Collapse Copy
:set fileencoding
 
ist das noch aktuell? könnte dir ein Tool machen. Wenn ja, dann wäre so eine TxT Datei hilfreich um am richtigen Patienten zu arbeiten
 
Zuletzt bearbeitet:
Zurück
Oben