0

让我首先说我知道可能有一种更简单的方法可以做到这一点。但这就是我所拥有的,是的,希望我能在最后做出一些改进和/或简化。

此刻的目标

将存储在下面变量中的输出加倍,并对$tmp每一行单独编号。这样做应该在不同的行上为我提供每组可执行命令。

问题 1

我已经尝试了所有我能想到的将变量中的空间加倍的方法。移动双空格命令,并更改命令本身。

要对我尝试修改此代码的文件进行编号:

 sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /

当然,用 awk 进行了实验,但没有进展..

不是那么长期的目标

  • 将这些命令一一执行并比较字节差异。或者只是任何一般的差异。我知道此时我可以使用 diff 命令,file1 file2然后将输出保存在某个变量中,例如:"$diffA $diffB"并每次使用循环更新它,以便有可能将超过 2 个文件作为参数传递。
  • 告诉每个命令行之间的区别。并回显类似:

file1 中的第 1 行与 file2 中的第 1 行不同,请查看:“$diffA $diffB”

这是我到目前为止所拥有的,它是一个开始:

#!/bin/bash

FILE="$1"

echo "You Entered $FILE"

if [ -f $FILE ]; then

tmp=$(cat $FILE | sed '/./!d' | sed -n '/regex/,/regex/{/regex/d;p}'| sed -n '/---/,+2!p' | sed -n '/#/!p' | sed 's/^[ ]*//' | sed -e\
s/[^:]*:// | sed -n '/regex /!p' | sed -n '/regex /!p' | sed -n '/"regex"/,+1!p' | sed -n '/======/!p' | sed -n '/regex/!p' | sed -n '/regex\
\r/!p' | sed -n '/regex /!p' )

fi

MyVar=$(echo $tmp)

echo "$MyVar | sed G"

FILE2="$2"
if [ -f $FILE2 ]; then
    if [ -f $FILE2 ]; then
         tmp2=$(cat $FILE2 | sed -n '/regex/,/regex/{/regex\ S/d;p}' |\ 
sed -n '/#/!p' | sed -e s/[^:]*:// | sed /--------/,+10d)
     fi


echo "$tmp2"

很感谢任何形式的帮助。

4

3 回答 3

1

以下 awk 脚本将输出双倍间距并对行编号:

awk ' { print NF " " $0; print ""; }'

您的问题是将其分配给变量:

( echo a; echo b) | awk ' { print NR " " $0; print ""; }'

给出:

1 a

2 b

tmp=$(( echo a; echo b) | awk ' { print NR " " $0; print ""; }')
echo "$tmp"

1 a 2 b

因为使用 $() 将用空格替换换行符。您将不得不使用一个临时文件:

tmp=$(mktemp)
awk ' { print NR " " $0; print ""; }' $FILE > $tmp
cat $tmp # Do something with the file
rm $tmp # Don't forget to clean up after yourself.
于 2008-12-05T11:41:21.053 回答
0

这可能对您有用:

a=$(printf "aaa %d\n" {1..5} | sed = | sed 'N;s/\n//;G')
echo $a
1aaa 1 2aaa 2 3aaa 3 4aaa 4 5aaa 5
echo "$a"
1aaa 1

2aaa 2

3aaa 3

4aaa 4

5aaa 5

解释:

  1. sed =插入一个行号,追加一个换行符,然后追加一行
  2. sed 'N's/\n//;G'添加一个换行符,读取另一行并附加它。s/\n//删除嵌入的换行符。G将换行符附加到行尾。在循环结束时,在打印之前重新附加换行符。
于 2011-12-25T06:17:33.793 回答
0

使用临时文件的另一种方法是使用引号来抑制换行符/空格替换:

tmp="$(echo a; echo b)"
echo "$tmp"
于 2009-12-05T10:55:31.730 回答