我需要修改某些位置的空格数。 例如:
FixString VarString1
VarString2
FixString VarString3
VarString4
应该成为
FixString VarString1
VarString2
FixString VarString3
VarString4
在我的应用程序中,FixString是一个已知字符串(可以硬编码) 而VarString1,VarString2是变量字符串 重要的是,FixString之前的空格被调整为VarString之前的空格数。因此,FixString之前的空格数可以变得更多或更少。
我希望你能帮助我。 我当然可以向后解析文件,记住上一行中的缩进,如果行以&#34开头,则应用它。 * FixString" .... 但这似乎过于复杂。
我现在已经实现了Etan的想法。 它似乎适用于这个例子。我将不得不在我的实际文件上尝试...
IFS=''
MEMORY=""
while read -r line
do
STRIPPED=$(echo $line|sed 's/^ *//g')
if [ "${STRIPPED:0:9}" = "FixString" ]
then
# echo $line
MEMORY=$line
else
NUM=$(echo $line | sed 's/^\( *\).*$/\1/g')
if [ ! -z $MEMORY ]
then
echo -n $NUM
echo $MEMORY | sed 's/^ *//g'
fi
echo $line
MEMORY=""
fi
done < test.txt
答案 0 :(得分:1)
你可以试试这个:
sed -r '/FixString/{N;s/^\s*(.*\n)(\s*)/\2\1\2/}' test.txt
即,搜索 FixString (/FixString/
),将下一行追加到模式空间(N
),在第一个空格后捕获字符串({{1} })直到换行符并在换行符后捕捉空格((.*\n)
)。之后用第二行开头的空格((\s*)
)+第一行的其余字符串(包括换行符\2
)+替换空格(\1
)。