当前位置: 首页 > 知识库问答 >
问题:

如何在bash脚本中使用sed进行更改

徐旻
2023-03-14

Hi下面是我的bash脚本。它需要一个源文件和一个令牌文件,令牌文件包含servicename:用法我必须在源文件中逐行查找servicename,如果找到,然后计算内存使用量,然后用-Xmx\d{1,3}m更改-Xmxm。在下面的脚本粗线解释做什么多简单你可以先下站问题从下面的小部分脚本


line="Superviser.childOpts:-Xmx128m"
heapMB=750
line=($(echo $line|sed  "s/${-Xmx\d{1,3}m}/$-Xmx{$heapMB}m/g"))

那么上面的错误是什么

#!/bin/bash
sourceFile=$1
tokenFile=$2
if [ -z $sourceFile ]
then
echo "Please provide a valid source file"
exit 0
fi
if [ -z $tokenFile ]
then
echo "Please provide a valid token file"
exit 0
fi
#read token file and tokenize with : to get service name at 0 index and percentage usages at 1
declare arr_token_name
declare arr_token_usage
count=0
while read line
do
#here line contain :percentage usages
OIFS="$IFS"
IFS=$':'
arr=($line)
IFS="$OIFS"
if [ ! -z $line ]
then
arr_token_name[$count]=${arr[0]}
arr_token_usage[$count]=${arr[1]}
count=`expr $count + 1`
fi
done # read source file line by line test with all the tokens
totalMemKB=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)
echo "total mem = $totalMemKB"
while read line
do
result_token_search=""
#for j in "${arr_token_name[@]}"
#do
# echo "index=$j"
#done
count2=0
for i in "${arr_token_name[@]}"
do
#here search token in line , if found
#calculate memory for this getting percent usage from arr_token_usage then use calculate frmula then device by 1024
#then replace -Xmx\d{1,5}m with -Xmx
echo "line1=$line"
result_token_search=$(echo $line|grep -P "$i")
if [ -n "$result_token_search" ]
then
percent_usage=${arr_token_usage[$count2]}
let heapKB=$totalMemKB*$percent_usage/100
let heapMB=$heapKB/1024
echo "before sed=$line"
line=($(echo $line|sed "s/${-Xmx\d{1,3}m}/$-Xmx{$heapMB}m/g"))
echo "new line=$line"
echo "token found in line $line , token = $i"
fi
result_token_search=""
count2=`expr $count2+1`
cat "$line" >> tmp.txt
done
done

共有1个答案

唐兴思
2023-03-14

试试这句话:

line=$( sed  "s/-Xmx[0-9]\+/-Xmx$heapMB/" <<<$line )

用您的示例进行测试:

kent$  line="Superviser.childOpts:-Xmx128m" 

kent$  heapMB=750    

kent$  line=$( sed  "s/-Xmx[0-9]\+/-Xmx$heapMB/" <<<$line )    

kent$  echo $line
Superviser.childOpts:-Xmx750m
 类似资料:
  • 问题内容: 我有一些要自动执行的SQL脚本。过去,我使用过SQL * Plus,并从bash脚本中手动调用了sqlplus二进制文件。 但是,我试图找出是否有一种方法可以连接到数据库,并从bash脚本内部调用该脚本……以便我可以插入查询并使查询相对于特定天数运行过去。 问题答案: 我有点困惑。您应该能够从bash脚本中调用sqlplus。这可能就是您在第一个陈述中所做的 尝试在bash脚本中执行以

  • 问题内容: 我想尝试使用npm为Web应用程序运行各种构建任务。我知道我可以这样添加一个字段来做到这一点: 当您使用带有许多选项的更复杂的命令时,这变得很笨拙。是否有可能将这些命令移至bash脚本或类似的东西?就像是: 在文件中的哪里执行命令? 阅读这篇文章似乎是这样,但是我不清楚我应该在哪里放置文件或者丢失了什么。 问题答案: 完全有可能… 另外,请确保在bash文件的顶部放置一个哈希爆炸 还请

  • 问题内容: 我正在用geb进行功能测试。 我的应用程序是使用virgo部署的,并使用HSQLDB来存储数据。我想在此工作版本的应用程序上执行测试,但是每次运行webtests时,我都想从空数据库开始。 我写了一个简单的bash脚本 这将删除数据库并重新启动处女座。 但是,当我将其添加到build.gradle任务执行命令时,它永远不会结束。 为什么这样呢?当我在控制台中运行此脚本时,它会迅速返回(

  • 问题内容: 我写了一个脚本,希望它可以在bash中通过 管道传递 。就像是: 可能吗?怎么样? 问题答案: 看到这个简单的: 运行: 输出: debug_output.txt内容:

  • 问题内容: 我的目录仅包含两个文件,并且: 在读 并且仅包含 在成功生成: 但是,如果尝试这样做,则会出现错误: 是什么原因造成的?(我记得以类似的方式在基于图像的脚本中运行脚本,所以也许它是Alpine特有的)? 问题答案: Alpine附带ash作为默认外壳,而不是。 所以你可以 有一个shebang将/ bin / bash定义为sayhello.sh的第一行,因此您的文件sayhello.

  • 问题内容: 我有一个python脚本,该脚本在运行时会在终端上记录信息,我想将此记录信息发送到文本文件, 为了实现这一点,我正在插入文件 在文件末尾,我放入 问题是当它调用第一个命令时,它将终止脚本, 提前感谢我如何做这项工作的任何建议 问题答案: 问题在于,直到退出产生的外壳程序才返回,这时您的Python脚本将恢复。 执行所需操作的最简单方法是使用Python脚本作为参数来调用自身。代替 您将