我知道这个问题听起来有些奇怪,但我会尝试解释一下。
我有一个文件params
,如下所示:
3 p 1 1.732051 0 1.9628$/x2r_a/
4 p 1 1.732051 0 -1.9628$/x2r_a/
5 p -1 1.732051 0 1.9628$/x2r_a/
6 p -1 1.732051 0 -1.9628$/x2r_a/
我想要实现的是将$
之后的所有内容移动到右边,即第80行的“第一位”:
3 p 1 1.732051 0 1.9628 $/x2r_a/
4 p 1 1.732051 0 -1.9628 $/x2r_a/
5 p -1 1.732051 0 1.9628 $/x2r_a/
6 p -1 1.732051 0 -1.9628 $/x2r_a/
我们不知道$
符号前字符串的确切长度。它们之间的空间也必须用空格填充,仅此而已。
一如既往,我需要在bash 2.05中使用sed,awk或者类似的东西。
UPDATE
我没有具体说明文件是什么样的,所以更多:
c ------------------
c Something stupid
c ------------------
c there is a number: 9$/ar_numb/
c a line that looks
1 px 0.9814$/r_a/
2 px -0.9814$/r_a/
3 p 1 1.732051 0 1.9628$/x2r_a/
4 p 1 1.732051 0 -1.9628$/x2r_a/
5 p -1 1.732051 0 1.9628$/x2r_a/
6 p -1 1.732051 0 -1.9628$/x2r_a/
c
c dirty line
7 cz 0.9347$/x05d_a/
c very dirty
41 p 0$/A_Nel/!jl
1$/B_Nel/!jl
0$/C_Nel/!jl
0$/D_Nel/!jl
$bad element
42 p 1.723051$/A_NEel/!jl
1$/B_NEel/!jl
0$/C_NEel/!jl
0$/D_NEel/!jl
$kokode nanika kaite kudasai
我不会发布更改版本因为它太长了。我希望将$[string]
部分移到右侧,但没有$
的部分将保持不变。
答案 0 :(得分:1)
基于kojiro的答案,包括新要求
awk -F'$' '/\$/{printf("%-79s$%s\n", $1, $2);next}1' ./params
$ awk -F'$' '/\$/{printf("%-79s$%s\n", $1, $2);next}1' ./params
c ------------------
c Something stupid
c ------------------
c there is a number: 9 $/ar_numb/
c a line that looks
1 px 0.9814 $/r_a/
2 px -0.9814 $/r_a/
3 p 1 1.732051 0 1.9628 $/x2r_a/
4 p 1 1.732051 0 -1.9628 $/x2r_a/
5 p -1 1.732051 0 1.9628 $/x2r_a/
6 p -1 1.732051 0 -1.9628 $/x2r_a/
c
c dirty line
7 cz 0.9347 $/x05d_a/
c very dirty
41 p 0 $/A_Nel/!jl
1 $/B_Nel/!jl
0 $/C_Nel/!jl
0 $/D_Nel/!jl
$bad element
42 p 1.723051 $/A_NEel/!jl
1 $/B_NEel/!jl
0 $/C_NEel/!jl
0 $/D_NEel/!jl
$kokode nanika kaite kudasai
答案 1 :(得分:1)
awk -F'$' '{ printf("%-80s$%s\n", $1, $2) }' params
答案 2 :(得分:0)
这可能对您有用:
# sed '\|\(.*\)\($/.*\)|{h;x;s//\2/;x;s//\1/;:a;s/^.\{1,78\}$/ &/;ta;s/^\( *\)\(.*\)/\2\1/;G;s/\n//}' params
c ------------------
c Something stupid
c ------------------
c there is a number: 9 $/ar_numb/
c a line that looks
1 px 0.9814 $/r_a/
2 px -0.9814 $/r_a/
3 p 1 1.732051 0 1.9628 $/x2r_a/
4 p 1 1.732051 0 -1.9628 $/x2r_a/
5 p -1 1.732051 0 1.9628 $/x2r_a/
6 p -1 1.732051 0 -1.9628 $/x2r_a/
c
c dirty line
7 cz 0.9347 $/x05d_a/
c very dirty
41 p 0 $/A_Nel/!jl
1 $/B_Nel/!jl
0 $/C_Nel/!jl
0 $/D_Nel/!jl
$bad element
42 p 1.723051 $/A_NEel/!jl
1 $/B_NEel/!jl
0 $/C_NEel/!jl
0 $/D_NEel/!jl
$kokode nanika kaite kudasai
# printf "%.1s" {1..90}
123456789111111111122222222223333333333444444444455555555556666666666777777777788888888889#
说明:
$/...
$/....
$/...
$/...
字符串添加到该行的末尾。G
命令导致的嵌入式换行符。可替换地:
sed '\|\(.*\)\($/.*\)|!{s/.*/printf "%s\n" "&"/;b};s//printf "%-79s%s\n" "\1" "\2"/' params | sh
或者使用GNU sed:
sed '\|\(.*\)\($/.*\)|{s//printf "%-79s%s" "\1" "\2"/e}' params