- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 shell 脚本的新手。我正在使用 ksh。
我的脚本中有这一行,用于将变量 q
中的文本附加到变量 a
给出的特定行的末尾 包含行号。
sed -i ''$a's@$@'"$q"'@' test.txt
现在变量 q
可以包含大量文本,带有各种特殊字符,例如 !@#$%^&*()_+:"<>.,/;'[]= 等等,无一异常(exception)。
目前,我在我的脚本中使用了几个 sed 命令来删除本文中的任何 ' 和 "(sed "s/'//g"| sed 's/"//g'
), 但是当我执行上面的命令时我仍然得到以下错误
sed: -e expression #1, char 168: unterminated `s' command
非常感谢任何 sed、awk、perl 的建议
最佳答案
这里的难点在于引用(转义)sed命令中的替换分隔符@
:
sed -i ''$a's@$@'"$q"'@' test.txt
例如,如果 q
包含 @
它将不起作用。 @
会提前终止替换模式。示例:q='a@b'
,a=2
,命令扩展为
sed -i 2s@$@a@b@ test.txt
它不会将 a@b
附加到第 2 行的末尾,而是 a@
。
这可以通过转义 q
中的 @
字符来解决:
sed -i 2s@$@a\@b@ test.txt
但是,这种转义在 shell 中可能会很麻烦。另一种方法是使用另一个间接级别。下面是一个使用 Perl 单行代码的例子。首先 q
以引用的形式传递给脚本。然后,在脚本中将该变量分配给一个新的内部变量$q
。使用这种方法不需要转义替换分隔符:
perl -pi -E 'BEGIN {$q = shift; $a = shift} s/$/$q/ if $. == $a' "$q" "$a" test.txt
关于Linux:使用行号作为变量将变量附加到行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42980331/
我正在尝试使用 opencsv 库将 SQL 结果集导出到以逗号分隔的 csv 文件。但是,当我将结果集传递给 writeAll 函数时,除了它生成的文件不会用新行分隔行并在记事本中打开时创建一个几乎
所以我有一个包含混合行结尾的文件。我只需要删除 linux 换行符 (LF),但只保留 Windows 行结尾 (RFLF)。任何可以做到这一点的快速 bash one liner? 最佳答案 如果要
所以我有一个包含混合行结尾的文件。我只需要删除 linux 换行符 (LF),但只保留 Windows 行结尾 (RFLF)。任何可以做到这一点的快速 bash one liner? 最佳答案 如果要
嗨,我正在尝试将行尾代码以 CSV 格式放入,以将其导入到 Excel 我尝试放入 \n、“\n”、\r、“\r”、\r\n、“\r\n”但对我没有任何作用我试图将其导入 excel 2013 我的
while ((client = accept(sock, (struct sockaddr *) &c, (socklen_t *) &clientlength)) > 0) { int h =
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在从 LINUX(Debian) 读取一个 ASCII 文件到 Python CGI 脚本中,然后通过网页对其进行编辑然后保存, 如果我使用图形文本编辑器,编辑和未编辑的文件看起来是一样的,并且格
我有一个包含 n 列 y 行二进制值的文本文件。 我正在使用 getline 提取二进制值的每一行并将它们分配给 vector : 我正在使用 getline 提取文件的每一行,其中每一行由一系列由空
这个行尾问题让我抓狂... 背景:过去,我使用的是 core.autocrlf 设置,但我发现我遇到了不同的存储库表现不佳的问题(我在 Windows 上工作,我有一些需要 LF 结尾的存储库和一些需
我们有大量在不同平台上使用 CVS 的程序员。 我们有开发人员使用带 TortoiseCVS 的 Windows(它使用 cvsNT) 我们有开发者使用 ubuntu 8.04 我们的开发人员有两个盒
目前,我正在使用以下命令来更改 dos2unix 行尾,但这是针对 file-y 文件... sed -i 's/\r//' filename 有没有办法对目录中的所有文件运行此命令? 最佳答案 fo
我正在尝试将换行符 append 到已存在的文件中,但我尝试过的所有命令都导致仅 append 到第一行。我希望文件中的输出看起来像 行1 行2 private void addToFavToFil
我正在尝试将文件中的文本读入数组,然后将每个数组索引的内容输出到输出文件。我需要读取/存储数据直到它到达行尾,此时它应该重新开始读取/存储并重新使用数组进行临时存储,只输出到输出文件。 我不能使用 g
我在 PC 上安装了 Linux Mint,然后从 Bitbucket 克隆了 git 存储库以在其上运行。经过一些更改后,我确实在我的 PhpStorm ide 中提交了。在此提交期间,git 向我
我正在阅读有关 gcc 预处理的文档,我阅读了以下句子 ( here ): If the last line of any input file lacks an end-of-line marker
我们所有的开发人员都在 Windows 机器上工作,而构建是在 Linux 上完成的。 为了符合真正的方式,我们决定标准化行结尾并遵循场景 described on GitHub . 后来发现,有时从
出于某些原因,我的一个文件包含旧样式的mac行结尾(在osx上编辑后)。这些是“CR”(回车)字符,在git diff中显示为^m。 git不理解它们是行尾代码(真的有多难?)并将整个文件解释为一行。
为什么这段代码不起作用? b if b = true 错误:未定义局部变量或方法“b” 但是这样做: if b = true b end 他们不应该是一样的吗? 最佳答案 这是一个很好的问题。
我正在 checkout 具有Linux样式行结尾的文件(仅LF char)。当我在Windows中使用TortoiseSVN checkout 文件时,它将行尾转换为Windows样式(CR + L
我有一个 Windows 文本文件,其中包含一行(以 CRLF 结尾) aline 以下是几个命令的输出: [root@panel ~]# grep aline file.txt aline [roo
我是一名优秀的程序员,十分优秀!