【问题标题】:How to skip the expression in the beginning and ending of the string using Linux commands如何使用 Linux 命令跳过字符串开头和结尾的表达式
【发布时间】:2020-12-12 13:45:51
【问题描述】:

sh GetPrivateKey appname 在输出下方返回

-----BEGIN RSA PRIVATE KEY----- JDkldlkdlkdldldlk1G/XhgJk4TXeQ06OIunFDUVfWcvCZ+X-dkjdkjdjkdjkdjk B4SFZdjSo+fU2122jkslOreX7QYl8P3tL3BYg6dkHGkj9tbi83XrpbbRu2f0QOX3 PoiCOsV0BOiqXEUGLEQ6pWwNv9ZJCGvT/UFfmIl1SdlIMdkFDBGNhVyGz74ZS/ph OsDAwRr6yVA0V63L7ze0C31E1S1axXmD5zFnWltgNNGgTocVoEy0DeW46YNc/hms R2LeH3qpbnoMs/ZgxEYITPh3V+NQkLB5buVvQflNnYm4bOrWUy98t+hIV3mnM+wV CqW5L9dvI8qYx/fU65PdEJmIadAvP8pj4UtrwwIDAQABAoIBADQ53ubdX/iCe1Ji j4IMGbXnzLDagIiLVd7ekzyAWaJu5YjZhfoSqXlbVevGTvlpB907dPpwB28/9r6R sz3nMSkQhLB017uYrixnd17USQ9dCMPFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM jsdklsdklsdklsdklsdklsdklsdklsdFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR ywU7RqGelopd736SE4C2eFqLAhpiC+oxl7FmEIm1llITK5tlW8CK1F7MStK/akA/ JDsk1mKlsKCtDEU5c7TY2JDaTLA1qnoLFUPeiHMuCwoWBSVK9Irp3xsCgYEA4gca M3zbki6ToJ/hDNoNC5RrZI4o3KJDG9x97d8hYk0h3hhJCjFXr9MSm8Xwtp5SnAxS /bNHPSL1Wi+ZOIP4nNUG5Kto0KovPFf3U0c+LpH5kNGest9jnr49K+i5JDIItQQY NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR BJWcRmSBKOjuqk+LRLmOEBcAn9yqCZ6tXIMUyj/LEi4ArpHHr47h9bUs5AMoD/Zo cDFIozreSs41SwTh9VO9vHvnOzbTCD3uRKrsTikjyz7D+0gZtK/wa4dcEFIhHBKC NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR ZC7XIQ+yNaz6rkewVNP1pGfbRDWhtYDaRhoNws10leOyoqPL5Iea1fHjTSxQYROn NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR /RxlD3ECgYAFthRafjyETgE4o8RmAraYEqK9eYLnDG/pB9zsaq+Mlh8BExU7OWqx NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR VP9s6+olQVf7ZJyVlr9HydMBd/xdKhzXFH15AfTgIhKKzHe/OcBJTA== -----END RSA PRIVATE KEY-----

我想将其格式化为私钥。所以我写了下面的命令,它在上面的输出中找到空格(“”)并逐行显示,但是我不想分割-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- (包括它们末尾的空格)

[user@server]$ echo `sh GetPrivateKey appname`\ | tr " " "\n"
-----BEGIN
RSA
PRIVATE
KEY-----
JDkldlkdlkdldldlk1G/XhgJk4TXeQ06OIunFDUVfWcvCZ+X-dkjdkjdjkdjkdjk
B4SFZdjSo+fU2122jkslOreX7QYl8P3tL3BYg6dkHGkj9tbi83XrpbbRu2f0QOX3
PoiCOsV0BOiqXEUGLEQ6pWwNv9ZJCGvT/UFfmIl1SdlIMdkFDBGNhVyGz74ZS/ph
OsDAwRr6yVA0V63L7ze0C31E1S1axXmD5zFnWltgNNGgTocVoEy0DeW46YNc/hms
R2LeH3qpbnoMs/ZgxEYITPh3V+NQkLB5buVvQflNnYm4bOrWUy98t+hIV3mnM+wV
CqW5L9dvI8qYx/fU65PdEJmIadAvP8pj4UtrwwIDAQABAoIBADQ53ubdX/iCe1Ji
j4IMGbXnzLDagIiLVd7ekzyAWaJu5YjZhfoSqXlbVevGTvlpB907dPpwB28/9r6R
sz3nMSkQhLB017uYrixnd17USQ9dCMPFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
jsdklsdklsdklsdklsdklsdklsdklsdFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
ywU7RqGelopd736SE4C2eFqLAhpiC+oxl7FmEIm1llITK5tlW8CK1F7MStK/akA/
JDsk1mKlsKCtDEU5c7TY2JDaTLA1qnoLFUPeiHMuCwoWBSVK9Irp3xsCgYEA4gca
M3zbki6ToJ/hDNoNC5RrZI4o3KJDG9x97d8hYk0h3hhJCjFXr9MSm8Xwtp5SnAxS
/bNHPSL1Wi+ZOIP4nNUG5Kto0KovPFf3U0c+LpH5kNGest9jnr49K+i5JDIItQQY
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
BJWcRmSBKOjuqk+LRLmOEBcAn9yqCZ6tXIMUyj/LEi4ArpHHr47h9bUs5AMoD/Zo
cDFIozreSs41SwTh9VO9vHvnOzbTCD3uRKrsTikjyz7D+0gZtK/wa4dcEFIhHBKC
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
ZC7XIQ+yNaz6rkewVNP1pGfbRDWhtYDaRhoNws10leOyoqPL5Iea1fHjTSxQYROn
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
/RxlD3ECgYAFthRafjyETgE4o8RmAraYEqK9eYLnDG/pB9zsaq+Mlh8BExU7OWqx
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
VP9s6+olQVf7ZJyVlr9HydMBd/xdKhzXFH15AfTgIhKKzHe/OcBJTA==
-----END
RSA
PRIVATE
KEY-----

我认为sed 命令可以满足我的要求,但是我对 Linux 命令非常陌生。您的帮助将不胜感激。

预期输出:

-----BEGIN RSA PRIVATE KEY-----
JDkldlkdlkdldldlk1G/XhgJk4TXeQ06OIunFDUVfWcvCZ+X-dkjdkjdjkdjkdjk
B4SFZdjSo+fU2122jkslOreX7QYl8P3tL3BYg6dkHGkj9tbi83XrpbbRu2f0QOX3
PoiCOsV0BOiqXEUGLEQ6pWwNv9ZJCGvT/UFfmIl1SdlIMdkFDBGNhVyGz74ZS/ph
OsDAwRr6yVA0V63L7ze0C31E1S1axXmD5zFnWltgNNGgTocVoEy0DeW46YNc/hms
R2LeH3qpbnoMs/ZgxEYITPh3V+NQkLB5buVvQflNnYm4bOrWUy98t+hIV3mnM+wV
CqW5L9dvI8qYx/fU65PdEJmIadAvP8pj4UtrwwIDAQABAoIBADQ53ubdX/iCe1Ji
j4IMGbXnzLDagIiLVd7ekzyAWaJu5YjZhfoSqXlbVevGTvlpB907dPpwB28/9r6R
sz3nMSkQhLB017uYrixnd17USQ9dCMPFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
jsdklsdklsdklsdklsdklsdklsdklsdFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
ywU7RqGelopd736SE4C2eFqLAhpiC+oxl7FmEIm1llITK5tlW8CK1F7MStK/akA/
JDsk1mKlsKCtDEU5c7TY2JDaTLA1qnoLFUPeiHMuCwoWBSVK9Irp3xsCgYEA4gca
M3zbki6ToJ/hDNoNC5RrZI4o3KJDG9x97d8hYk0h3hhJCjFXr9MSm8Xwtp5SnAxS
/bNHPSL1Wi+ZOIP4nNUG5Kto0KovPFf3U0c+LpH5kNGest9jnr49K+i5JDIItQQY
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
BJWcRmSBKOjuqk+LRLmOEBcAn9yqCZ6tXIMUyj/LEi4ArpHHr47h9bUs5AMoD/Zo
cDFIozreSs41SwTh9VO9vHvnOzbTCD3uRKrsTikjyz7D+0gZtK/wa4dcEFIhHBKC
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
ZC7XIQ+yNaz6rkewVNP1pGfbRDWhtYDaRhoNws10leOyoqPL5Iea1fHjTSxQYROn
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
/RxlD3ECgYAFthRafjyETgE4o8RmAraYEqK9eYLnDG/pB9zsaq+Mlh8BExU7OWqx
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
VP9s6+olQVf7ZJyVlr9HydMBd/xdKhzXFH15AfTgIhKKzHe/OcBJTA==
-----END RSA PRIVATE KEY-----

【问题讨论】:

  • 感谢您在问题中表现出您的努力。您能否发布预期的示例输出以更好地理解问题。
  • 我敢打赌 sh GetPrivateKey appname 不会返回您所说的内容,而是返回您想要的内容,但您使用的是未引用的 echo 来打印它,这将转换所有换行符到空白。这肯定是您问题中的echo `sh GetPrivateKey appname 会做的事情。尝试直接运行sh GetPrivateKey appname,而不是在前面添加echo

标签: linux shell awk sed format


【解决方案1】:

你可以试试这个gnu awk:

awk -v RS='-{5}(BEGIN|END) [^-]* KEY-{5}' '{
gsub(/ /, "\n"); ORS=RT} 1' file.rsa

或者使用perl:

perl -pe 's/-{5}(BEGIN|END) [^-]* KEY-{5}(*SKIP)(*F)|\h/\n/g' file.rsa

输出:

-----BEGIN RSA PRIVATE KEY-----
JDkldlkdlkdldldlk1G/XhgJk4TXeQ06OIunFDUVfWcvCZ+X-dkjdkjdjkdjkdjk
B4SFZdjSo+fU2122jkslOreX7QYl8P3tL3BYg6dkHGkj9tbi83XrpbbRu2f0QOX3
PoiCOsV0BOiqXEUGLEQ6pWwNv9ZJCGvT/UFfmIl1SdlIMdkFDBGNhVyGz74ZS/ph
OsDAwRr6yVA0V63L7ze0C31E1S1axXmD5zFnWltgNNGgTocVoEy0DeW46YNc/hms
R2LeH3qpbnoMs/ZgxEYITPh3V+NQkLB5buVvQflNnYm4bOrWUy98t+hIV3mnM+wV
CqW5L9dvI8qYx/fU65PdEJmIadAvP8pj4UtrwwIDAQABAoIBADQ53ubdX/iCe1Ji
j4IMGbXnzLDagIiLVd7ekzyAWaJu5YjZhfoSqXlbVevGTvlpB907dPpwB28/9r6R
sz3nMSkQhLB017uYrixnd17USQ9dCMPFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
jsdklsdklsdklsdklsdklsdklsdklsdFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
ywU7RqGelopd736SE4C2eFqLAhpiC+oxl7FmEIm1llITK5tlW8CK1F7MStK/akA/
JDsk1mKlsKCtDEU5c7TY2JDaTLA1qnoLFUPeiHMuCwoWBSVK9Irp3xsCgYEA4gca
M3zbki6ToJ/hDNoNC5RrZI4o3KJDG9x97d8hYk0h3hhJCjFXr9MSm8Xwtp5SnAxS
/bNHPSL1Wi+ZOIP4nNUG5Kto0KovPFf3U0c+LpH5kNGest9jnr49K+i5JDIItQQY
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
BJWcRmSBKOjuqk+LRLmOEBcAn9yqCZ6tXIMUyj/LEi4ArpHHr47h9bUs5AMoD/Zo
cDFIozreSs41SwTh9VO9vHvnOzbTCD3uRKrsTikjyz7D+0gZtK/wa4dcEFIhHBKC
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
ZC7XIQ+yNaz6rkewVNP1pGfbRDWhtYDaRhoNws10leOyoqPL5Iea1fHjTSxQYROn
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
/RxlD3ECgYAFthRafjyETgE4o8RmAraYEqK9eYLnDG/pB9zsaq+Mlh8BExU7OWqx
NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
VP9s6+olQVf7ZJyVlr9HydMBd/xdKhzXFH15AfTgIhKKzHe/OcBJTA==
-----END RSA PRIVATE KEY-----

【讨论】:

  • 您能否解释一下\h 的用法,因为单个space 也可以使用?
  • \h 匹配空格或制表符
  • 我知道 \h 匹配空格或制表符,但您可以(应该?)使用 space,就像您在 awk 版本中所做的那样。
  • 是的,当然我们可以使用空格代替\h
【解决方案2】:

根据您展示的示例,您能否尝试以下使用 GNU awk 编写的。

awk '
match($0,/KEY-+.*-+END/){
  val=substr($0,RSTART,RLENGTH)
  num=split(val,arr," ")
  print substr($0,1,RSTART-1) arr[1]
  for(i=2;i<num;i++){
     print arr[i]
  }
  print arr[num] substr($0,RSTART+RLENGTH)
}
' Input_file

说明:为上述添加详细说明。

awk '                                        ##Starting awk program from here.
match($0,/KEY-+.*-+END/){                    ##Using match function to match regex KEY-+.*-+END in current line.
  val=substr($0,RSTART,RLENGTH)              ##Creating val which has sub string of matched regex.
  num=split(val,arr," ")                     ##Splitting val into array arr.
  print substr($0,1,RSTART-1) arr[1]         ##printing sub string before matched regex character and printing array 1st element.
  for(i=2;i<num;i++){                        ##Going through all elements of arr here.
     print arr[i]                            ##Printing arr element with index i here.
  }
  print arr[num] substr($0,RSTART+RLENGTH)   ##Printing rest of line after matched regex.
}
' Input_file 

【讨论】:

    【解决方案3】:

    使用任何 awk:

    $ awk -v OFS='\n' '{
        beg = end = $0
        sub(/- .*/,"-",beg)
        sub(/.* -/,"-",end)
        gsub(/^.*- | -.*$/,"")
        $1 = $1
        print beg, $0, end
    }' file
    -----BEGIN RSA PRIVATE KEY-----
    JDkldlkdlkdldldlk1G/XhgJk4TXeQ06OIunFDUVfWcvCZ+X-dkjdkjdjkdjkdjk
    B4SFZdjSo+fU2122jkslOreX7QYl8P3tL3BYg6dkHGkj9tbi83XrpbbRu2f0QOX3
    PoiCOsV0BOiqXEUGLEQ6pWwNv9ZJCGvT/UFfmIl1SdlIMdkFDBGNhVyGz74ZS/ph
    OsDAwRr6yVA0V63L7ze0C31E1S1axXmD5zFnWltgNNGgTocVoEy0DeW46YNc/hms
    R2LeH3qpbnoMs/ZgxEYITPh3V+NQkLB5buVvQflNnYm4bOrWUy98t+hIV3mnM+wV
    CqW5L9dvI8qYx/fU65PdEJmIadAvP8pj4UtrwwIDAQABAoIBADQ53ubdX/iCe1Ji
    j4IMGbXnzLDagIiLVd7ekzyAWaJu5YjZhfoSqXlbVevGTvlpB907dPpwB28/9r6R
    sz3nMSkQhLB017uYrixnd17USQ9dCMPFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
    jsdklsdklsdklsdklsdklsdklsdklsdFUg61ZCIsTJkt+3SkZnsoPapGgztnNVOM
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    ywU7RqGelopd736SE4C2eFqLAhpiC+oxl7FmEIm1llITK5tlW8CK1F7MStK/akA/
    JDsk1mKlsKCtDEU5c7TY2JDaTLA1qnoLFUPeiHMuCwoWBSVK9Irp3xsCgYEA4gca
    M3zbki6ToJ/hDNoNC5RrZI4o3KJDG9x97d8hYk0h3hhJCjFXr9MSm8Xwtp5SnAxS
    /bNHPSL1Wi+ZOIP4nNUG5Kto0KovPFf3U0c+LpH5kNGest9jnr49K+i5JDIItQQY
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    BJWcRmSBKOjuqk+LRLmOEBcAn9yqCZ6tXIMUyj/LEi4ArpHHr47h9bUs5AMoD/Zo
    cDFIozreSs41SwTh9VO9vHvnOzbTCD3uRKrsTikjyz7D+0gZtK/wa4dcEFIhHBKC
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    ZC7XIQ+yNaz6rkewVNP1pGfbRDWhtYDaRhoNws10leOyoqPL5Iea1fHjTSxQYROn
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    /RxlD3ECgYAFthRafjyETgE4o8RmAraYEqK9eYLnDG/pB9zsaq+Mlh8BExU7OWqx
    NuFxSBXKOecYV2I5sfo9owjOEQFt2O/1D2KCvMETgF9Fqi99321Fqe9aKHLM2NCR
    VP9s6+olQVf7ZJyVlr9HydMBd/xdKhzXFH15AfTgIhKKzHe/OcBJTA==
    -----END RSA PRIVATE KEY-----
    

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 2013-08-04
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多