我有这个文件
我有这个名为 filename 的文件,内容是
export k="multiline_v"
例如
export k="kdk=dkdk
kdkdkdk=kdkd
ldldldsgg"
另一个例子:
export k="-----BEGIN CERTIFICATE-----
MIIENjCCAx4CCQDQDy8tPglm1DANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQDDAJD
QTENMAsGA1UECwwEU1NDRTENMAsGA1UECgwEU1NOQzEPMA0GA1UEBwwGRFVSSEFN
AQELBQADggEBAHgkLaegFG5CemXZfSocsaR/4zSbTgefgCTusrArUJGMO+2CNQRP
5lK9bXaXykyX7lJGsdZbS13Vy9sdQQVj0icW70bagIwl/p8mXbTzTgDdtCPsJLN7
uOkQRS646rp4nVEmp86imAgGWL+sdBG9WPhYsD0ZeDd28B6XBVMfm1k5DfPR9r6E
iigSB0hbPIlEbVpHQNsuHdpbKqGLjm4mNCpxdqjSMDNt9VjJAdjrZb7eQjuai95F
Vy9bwizvXDoE2pPJ056gkBYLS7nhS277lgs9Z+oLDa0bRFxw27pvNPvkaDv5dtyd
b/F+NL/Fe738KoZ3FO69Fl6GnNZiMOP50gc=
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDBi+FpwvWVTWbY
XN/zvjDJPOtffs3o6EuQAAhE5XAgfudar8gcojAegL9mU3owa5+s0w0Je9eWDkQt
XkxewcAfcKZ08vALmZhyI8w5+dJPTQqGug1aObF+W+hUezKr/l6nyfT8cbdP/gPT
Wp0wfm6yJUFaecUgYh8I3gvsJ5XaV5OHilNVzz53nYXCAdXmSyocwef51XWchJh0
EYKZzw0V6t0CLuCnbAcICjQ3GNP5HaZ8cfXkIGDqmTJM4UCDfAMG7mkv0O13+7uW
b9PnaQEZ175Aj27f+ke4w2q3Bd0BGNVkmc8bvqlL6Q9GUGJJcF6VSpNVNP/Royr+
yyOY18Zk20TB3wZC3RI4qh8eATkToHoEM+THRgsoUGesx4r4axWEz3Ud2NxN8elk
5O8ghWqmxnEdcXDtyA90Io7ZWRjP8pE=
-----END PRIVATE KEY-----"
我用这个来剪名字k
filename=myfile
key=$(head -n1 $filename | cut -d '=' -f 1 | cut -d ' ' -f 2)
然后我想要另一个名为 k 的文件,内容为 v ,不带“”
在上面的例子中,它会是
kdk=dkdk
kdkdkdk=kdkd
ldldldsgg
和
-----BEGIN CERTIFICATE-----
MIIENjCCAx4CCQDQDy8tPglm1DANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQDDAJD
QTENMAsGA1UECwwEU1NDRTENMAsGA1UECgwEU1NOQzEPMA0GA1UEBwwGRFVSSEFN
AQELBQADggEBAHgkLaegFG5CemXZfSocsaR/4zSbTgefgCTusrArUJGMO+2CNQRP
5lK9bXaXykyX7lJGsdZbS13Vy9sdQQVj0icW70bagIwl/p8mXbTzTgDdtCPsJLN7
uOkQRS646rp4nVEmp86imAgGWL+sdBG9WPhYsD0ZeDd28B6XBVMfm1k5DfPR9r6E
iigSB0hbPIlEbVpHQNsuHdpbKqGLjm4mNCpxdqjSMDNt9VjJAdjrZb7eQjuai95F
Vy9bwizvXDoE2pPJ056gkBYLS7nhS277lgs9Z+oLDa0bRFxw27pvNPvkaDv5dtyd
b/F+NL/Fe738KoZ3FO69Fl6GnNZiMOP50gc=
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDBi+FpwvWVTWbY
XN/zvjDJPOtffs3o6EuQAAhE5XAgfudar8gcojAegL9mU3owa5+s0w0Je9eWDkQt
XkxewcAfcKZ08vALmZhyI8w5+dJPTQqGug1aObF+W+hUezKr/l6nyfT8cbdP/gPT
Wp0wfm6yJUFaecUgYh8I3gvsJ5XaV5OHilNVzz53nYXCAdXmSyocwef51XWchJh0
EYKZzw0V6t0CLuCnbAcICjQ3GNP5HaZ8cfXkIGDqmTJM4UCDfAMG7mkv0O13+7uW
b9PnaQEZ175Aj27f+ke4w2q3Bd0BGNVkmc8bvqlL6Q9GUGJJcF6VSpNVNP/Royr+
yyOY18Zk20TB3wZC3RI4qh8eATkToHoEM+THRgsoUGesx4r4axWEz3Ud2NxN8elk
5O8ghWqmxnEdcXDtyA90Io7ZWRjP8pE=
-----END PRIVATE KEY-----
如果我可以复制该文件并找到一个命令来就地执行此操作,那就太好了,因为该文件不会更改并且我想要保留的部分(第一行中第一个 = 符号的右侧以及所有除了最后一个“)之外的其他行将保持不变,我更愿意这样做。
我认为这是不可能的。这就是为什么我必须以某种方式复制和处理它。 如何做到一切都保持不变。
这个Shellcheck干净的代码演示了一种可能的方法来完成你想要的事情:
#! /bin/sh -
filename=$1
sh -c ' fake_export()
{
printf "%s\\n" "${1#*=}" >"${1%%=*}"
}
alias export=fake_export
. "$1"
' sh "$filename"
将其保存到文件(例如
myprog
),使其可执行(chmod +x myprog
)并使用 ./myprog ./myfile
进行测试(其中 myfile
包含 export k="...."
)。