Mai*_*oID 71 linux windows end-of-line
我是一名Java开发人员,我正在使用Ubuntu进行开发.该项目是在Windows中使用Eclipse创建的,它使用的是CP1252编码.
要转换为UTF-8,我使用了重新编码程序:
find Web -iname \*.java | xargs recode CP1252...UTF-8
Run Code Online (Sandbox Code Playgroud)
此命令会出现此错误:
recode: Web/src/br/cits/projeto/geral/presentation/GravacaoMessageHelper.java failed: Ambiguous output in step `CR-LF..data
Run Code Online (Sandbox Code Playgroud)
我已经关注它并在此处获得解决方案:http://fvue.nl/wiki/Bash_and_Windows#Recode:_Ambiguous_output_in_step_.60data..CR-LF.27 它说:
将行结尾从CR/LF转换为单个LF:使用vim编辑文件,给出命令:set ff = unix并保存文件.Recode现在应该运行没有错误.
很好,但我有很多文件要删除CR/LF字符,我无法打开每个人来做它.Vi不为bash操作提供命令行的任何选项.
sed可以用来做这个吗?怎么样 ?
谢谢=)
cHa*_*Hao 110
应该有一个调用的程序dos2unix
可以为你修复行结尾.如果它不在你的Linux机器上,它应该可以通过包管理器获得.
Jic*_*hao 80
sed无法匹配\n因为在将行放入模式空间之前删除了尾部换行但可以匹配\ r \n,因此您可以通过删除\ r \n将\ r \n(dos)转换为\n(unix)
sed -i 's/\r//g' file
Run Code Online (Sandbox Code Playgroud)
警告:这将更改原始文件
但是,您无法通过此方式从unix EOL更改为dos或旧mac(\ r \n).更多阅读材料:
Ara*_*dur 16
实际上,vim确实允许你正在寻找的东西.输入vim,然后键入以下命令:
:args **/*.java
:argdo set ff=unix | update | next
Run Code Online (Sandbox Code Playgroud)
这些命令中的第一个将参数列表设置为每个匹配的**/*.java
文件,即递归的所有Java文件.这些命令中的第二个依次对参数列表中的每个文件执行以下操作:
tr命令也可以这样做:
tr -d'\ 15\32'<winfile.txt> unixfile.txt
并且应该可供您使用.
您需要在脚本中运行tr,因为它无法使用文件名.例如,创建一个文件myscript.sh:
#!/bin/bash
cd ${1}
for f in `find -iname \*.java`; do
echo $f
tr -d '\15\32' < $f > $f.tr
mv $f.tr $f
recode CP1252...UTF-8 $f
done
Run Code Online (Sandbox Code Playgroud)
运行myscript.sh Web将处理文件夹Web中的所有java文件.
我将对智超的回答略有例外。实际上,您可以轻松地完成他刚才谈到的所有事情。而不是寻找\ n,只需在行尾查找换页。
sed -i 's/\r$//' ${FILE_NAME}
Run Code Online (Sandbox Code Playgroud)
要从Unix更改为dos,只需查找该行的最后一个字符并向其中添加换页。(我将添加-r以使grep正则表达式更容易实现。)
sed -ri 's/(.)$/\1\r/' ${FILE_NAME}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,可以通过在最后一个示例中添加代码来将文件更改为mac样式,该示例还将输入的下一行追加到第一行,直到处理完所有行。不过,我不会在这里举这个例子。
警告: -i更改实际文件。如果要进行备份,请在-i之后添加一个字符串。这会将现有文件移动到与您的字符添加到最后的同名文件。
为了克服
Ambiguous output in step `CR-LF..data'
Run Code Online (Sandbox Code Playgroud)
简单的解决方案可能是添加-f
标志以强制转换.
归档时间: |
|
查看次数: |
111032 次 |
最近记录: |