我在bash(或perl)上比較喜歡noob。尋找一種方法來修改某些線在一個文件中,(基本上除去每一行的前兩個字符,並添加一個「」在每行的末端)對文件的文本處理
###element
##.element
###test-element-00
變爲下面,
#element,
.element,
#test-element-00,
感謝
我在bash(或perl)上比較喜歡noob。尋找一種方法來修改某些線在一個文件中,(基本上除去每一行的前兩個字符,並添加一個「」在每行的末端)對文件的文本處理
###element
##.element
###test-element-00
變爲下面,
#element,
.element,
#test-element-00,
感謝
在bash,那麼你正在尋找的是sed命令,嘗試:
cat filename | sed 's/^..\(.*\)$/\1,/'
的一點簡單的sed(1)是所有你需要爲:
sed 's/^..//' < your_file | sed 's/$/,/'
或者你可以使用Perl如果你真的想:
perl -pe 's/^..(.*)/$1,/' < your_file
或者你甚至可以切做(1),xargs的(1),和printf(1):
cut -c2- < your_file | xargs printf '%s,\n'
我們很可能整晚都在這裏隨着shell工具的巧妙組合來實現所需的轉換,我可能只需要使用perl,然後轉向更高效的工作。
sed
方法可能可以做得更好,但我的sed是生鏽的。
嘗試是這樣的:
my @old_lines = qw(###element ##.element ###test-element-00);
my @new_lines;
for my $line (@old_lines) {
$line =~ s/^##//;
$line .= ',';
push @new_lines, $line;
}
print "@new_lines";
AWK
$> awk '/^#/ { print substr($0,3)"," }' file
#element,
.element,
#test-element-00,
紅寶石(1.9+)
$> ruby -ne 'print "#{$_.chomp[2..-1]},\n" if /^#/' file
#element,
.element,
#test-element-00,
或者只是純粹的bash
$> while read -r line; do echo "${line:2},"; done < file
#element,
.element,
#test-element-00,
或者如果你喜歡的sed
$> sed 's/^..//;s/$/,/' file
#element,
.element,
#test-element-00,
有這樣做的幾種方法,這樣做的一個方式在perl是:
$line = '##element'
$line = substr ($line, 2) . ',';
行,只適用於多種:
yes , | head -n $(wc -l < filename) | paste -d '' <(cut -c3- filename) -
或
yes , | head -n $(wc -l < filename) | paste -d '' <(grep -Po '..\K.*' filename) -
需要一個外殼,諸如擊,支持進程替換。對於grep
版本,需要支持Perl Compatible Regular Expressions。
perl -ple's/..(.*)/$1,/' infile > outfile
perl -ple's/..//;s/$/,/' infile > outfile
使用就地編輯:
perl -i -ple's/..(.*)/$1,/' file
perl -i -ple's/..//;s/$/,/' file
這裏還有一條辦法做到這一點使用ed命令:
str='
###element
##.element
###test-element-00
'
# for in-place file editing use "ed -s file" and replace ",p" with "w"
# cf. http://wiki.bash-hackers.org/howto/edit-ed
cat <<-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | ed -s <(echo "$str")
H
,g/.\{2\}/s/^..\(.*\)$/\1,/
,p
q
EOF
Bash可以處理這只是罰款:line="##element"; echo "${line#??},"
+1提醒我sed中的分組工作方式(我們今天使用哪種標準正則表達式語法?),-0.5用於無用貓(1),+ 0.5因爲corgis是偉大的狗。 – 2011-03-19 05:03:45
-1 for useless cat。 – kurumi 2011-03-19 05:07:52