我很喜欢bash(或perl)。想办法修改文件中的某些行,(基本上删除每行的前2个字符,并在每行的末尾添加“,”)
###element
##.element
###test-element-00
成为以下内容,
#element,
.element,
#test-element-00,
由于
答案 0 :(得分:5)
perl -ple's/..(.*)/$1,/' infile > outfile
perl -ple's/..//;s/$/,/' infile > outfile
使用就地编辑:
perl -i -ple's/..(.*)/$1,/' file
perl -i -ple's/..//;s/$/,/' file
答案 1 :(得分:2)
在bash上你正在寻找的命令是sed,试试:
cat filename | sed 's/^..\(.*\)$/\1,/'
答案 2 :(得分:1)
您只需要一点简单的sed(1):
sed 's/^..//' < your_file | sed 's/$/,/'
如果你真的想要,你可以使用Perl:
perl -pe 's/^..(.*)/$1,/' < your_file
或者您甚至可以使用cut(1),xargs(1)和printf(1)执行此操作:
cut -c2- < your_file | xargs printf '%s,\n'
我们可能整晚都会在这里使用聪明的shell工具组合来执行所需的转换,我可能只需要使用perl,然后继续使用更高效的东西。
sed
方法可能会做得更好,但我的sed生锈了。
答案 3 :(得分:0)
尝试这样的事情:
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";
答案 4 :(得分:0)
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 's/^..//;s/$/,/' file
#element,
.element,
#test-element-00,
答案 5 :(得分:0)
有几种方法可以做到这一点,在perl中执行此操作的一种方法是:
$line = '##element'
$line = substr ( $line, 2 ) . ',';
答案 6 :(得分:0)
好的,只是为了变化:
yes , | head -n $(wc -l < filename) | paste -d '' <(cut -c3- filename) -
或
yes , | head -n $(wc -l < filename) | paste -d '' <(grep -Po '..\K.*' filename) -
需要支持进程替换的shell,例如Bash。对于grep
版本,需要支持Perl兼容正则表达式。
答案 7 :(得分:0)
这是使用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
答案 8 :(得分:0)
Bash可以处理这个问题:line="##element"; echo "${line#??},"