Tag: bash

sed命令在文件中查找和replace,覆盖文件不起作用,它清空文件

我想通过命令行在HTML文件上运行查找和replace。 我的命令看起来像这样: sed -es/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html > index.html 当我运行这个,然后看文件时,它是空的。 它删除了我的文件的内容。 当我再次恢复文件后运行这个: sed -es/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html stdout是文件的内容,查找和replace已经执行。 为什么发生这种情况?

用bash变量替换sed

尝试使用sed在文本文件中更改bash脚本中的值, sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp 这将在for循环。 不知道为什么它不工作。 有什么建议么?

在Bash中管道输出和捕获退出状态

我想在Bash中执行一个长时间的运行命令,并且捕获它的退出状态,并且开始输出。 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee的退出状态而不是命令。 我该如何解决这个问题? 请注意,命令是长时间运行,并将输出重定向到一个文件,稍后查看它不是一个好的解决方案。

快速和肮脏的方式来确保一次只运行一个shell脚本的一个实例

什么是快速和肮脏的方法来确保在给定的时间只有一个shell脚本的实例正在运行?

在Bash中转换文件的有效方法

我有一个巨大的制表符分隔文件格式化 X column1 column2 column3 row1 0 1 2 row2 3 4 5 row3 6 7 8 row4 9 10 11 我只想使用bash命令以有效的方式转换它(我可以编写十行左右的Perl脚本来执行此操作,但执行速度应该比本机bash函数慢)。 所以输出应该看起来像 X row1 row2 row3 row4 column1 0 3 6 9 column2 1 4 7 10 column3 2 5 8 11 我想到了这样的解决方案 cols=`head -n 1 input | wc -w` for (( i=1; i […]

将多行输出捕获到Bash变量中

我有一个脚本'myscript'输出以下内容: abc def ghi 在另一个脚本中,我打电话给: declare RESULT=$(./myscript) 和$RESULT获取值 abc def ghi 有没有办法用换行符存储结果,或用'\ n'字符存储结果,所以我可以输出' echo -e '?

超时在bash命令没有不必要的延迟

命令行命令的 这个答案 在一段时间后自动杀死一个命令 提出了一个1行方法来从bash命令行中超时一个长时间运行的命令: ( /path/to/slow command with options ) & sleep 5 ; kill $! 但是,一个给定的“长时间运行”命令可能会比超时更早完成。 (让我们把它称为“通常长时间运行但有时是快速的”命令,或者叫做tlrbsf )。 所以这个漂亮的1-liner方法有一些问题。 首先, sleep不是有条件的,因此设置序列完成所花费的时间的下限。 当tlrbsf命令在2秒钟内完成时, 考虑睡眠30s或2m甚至5m,这是非常不理想的。 其次, kill是无条件的,所以这个序列将试图杀死一个没有运行的过程,并抱怨它。 所以… 有没有办法超时通常长时间运行,但有时快( “tlrbsf” )命令 有一个bash实现(另一个问题已经有Perl和C的答案) 将在两者之前终止: tlrbsf程序终止,或者超时 不会杀死不存在的/不正在运行的进程(或者,可选地:不会抱怨不好的kill) 不一定是一个班轮 可以在Cygwin或Linux下运行 …并且对于奖励点,在前台运行tlrbsf命令并且在后台运行任何“睡眠”或额外的进程,使得tlrbsf命令的stdin / stdout / stderr可以被重定向,就像它已经被直接运行? 如果是这样,请分享您的代码。 如果没有,请解释原因。 我花了一段时间试图破解前面提到的例子,但我正在打击我的技能的极限。

我们什么时候需要在shell变量上花括号?

在shell脚本中,扩展变量时什么时候使用{} ? 例如,我看到以下内容: var=10 # Declare variable echo "${var}" # One use of the variable echo "$var" # Another use of the variable 有一个显着的差异,还是只是风格? 一个比另一个更受欢迎吗?

如何管道标准错误,而不是标准输出?

我有一个程序,写信息到stdout和stderr ,我需要grep通过什么来标准错误 ,而无视标准输出 。 我当然可以分两步来做: command > /dev/null 2> temp.file grep 'something' temp.file 但我宁愿能够做到这一点没有临时文件。 有没有巧妙的管道技巧?

sed – 未知选项到's'

我正在尝试使用 sed -i -e "s/.*seb.*/ \"$ftp_login_template\"/" $ftp_dir 但是我得到这个错误: sed: -e expression #1, char 34: unknown option to `s' 我不明白为什么,因为这完美的作品: sed -i -e "s/.*wbspassword.*/ \"wbspassword\": \"$password\",/" $user_conf 任何想法,我做错了什么? 这可能是问题吗? ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"