テキストファイルのすべての行の先頭に##を追加します


30

通常のテキストファイルのすべての行にハッシュを追加したい。ターミナルとGUIの両方の使用に問題はありません。必要なのはそれだけです。

回答:


50

あなたはそれをするsedために使うことができます:

sed -i.bak 's/^/##/' file

これにより、行の先頭(^)がに置き換えられ##ます。

では-i.bakスイッチ、sedインプレースのファイルを編集しますが、拡張子を持つバックアップコピーを作成します.bak


1
+1これは、このバックアップ方法に初めて遭遇したときです。私は常に直接インライン置換を行いました:sed 's/^/##/' -i file。この場合、間違った方向に進むことができないため、これが優先されます。他の場合では、このコマンドを組み合わせてdiff -u file.bak file違いを確認することができます(必要に応じてをパイプ処理しますless)。動作することが確認されたら、バックアップを削除できます。それ以外の場合は、単純なで復元できますmv file.bak file
レーケンシュタイン

1
エレガント。のようなものを考えてsed 's/^\(.*\)$/##\1/'いましたが、これはずっといいです。
手配

素敵なもの..これを行うようにVimに提案することを考えていました
...-サティッシュ

これにより、ブロックリストファイルを変換できました:)ありがとう1+
Neil

8

perlを使用してこの問題を解決します

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
この-pスイッチも便利ですperl -pe 's/^/##/' infile > outfile。(-i[extension]ターゲットファイルをインプレースで置き換えるスイッチもあります。)perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka Matilainen


4

ここだbash方法は:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

ではbashシェル、ランニングread -rなし他の引数とすることのように動作しますIFS= read -r REPLY。)

これは、テキスト処理に関してはシェルよりも効率的であると期待される可能性があるため、おそらくbeav_35のperlソリューションからインスピレーションを得perlています。


3

sed -iPOSIX標準ではないので、あなたが純粋主義者なら、あなたは使いたいでしょうed

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

perl他の場所よりも簡単な方法を次に示します。

perl -pi -e 'print "##"' YOURFILEHERE

これは(ab)でperl -p指定されたコマンドを実行した後に行を印刷するという事実を使用してい-eます。



0

pythonのマッピング関数とstdinのリダイレクトで行うことができます:

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

出力を新しいファイルに保存し、元のファイルの代わりに使用します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.