Linux文件中出现^M字符一般是因为这个文件曾经是在Windows系统中编辑保存的,在Windows中编辑保存的文本文件的回车符是CR和LF两个符号,而Linux文件中的回车符只是一个LF符号,所以当Windows的文本文件放到Linux后,回车的位置会多出来一个^M的符号(Linux的文本文件在Windows上打开,在回车的位置上变成了一个方块并且回车不会换行)。
去除^M字符的方法是在Linux上用dos2UNIX命令对文件进行转换,将文本文件转换为适合Linux的格式(也有的Linux发行版没有安装dos2UNIX命令,需要用yum install unix2dos或apt-get install unix2dos命令来安装它,注意unix是小写)。dos2UNIX命令的用法是:
dos2UNIX -k -n 原来的文件名 转换后的新文件名
命令选项说明:
-k选项:表示保留文件原来的mtime时间格式,一般会加上这个参数
-n参数:保留旧文件并输出到一个新文件
转换后的新文件打开就没有^M字符了。
㈡ 怎么样在linux命令行中删除字符
linux下命令行删除上一个字符使用ctrl-h,删除光标到行首使用ctrl-u,删除光标到行尾使用ctrl-k,跳转到上一个单词使用alt-b,跳转到下一个单词使用alt-f,跳转到行首使用ctrl-a,跳转到行尾使用ctrl-e,搜索历史命令使用ctrl-r。以上这些是常用命令,目前我没有找到删除上一个单词的快捷键(这个功能很常用),如果你找到了希望你告诉我。
㈢ linux下 C语言 怎么给密码显示*并且按backspace的时候能消去输入的字符
pass保存你输入的密码
char *password(char *pass)
{
char *cur = pass;
printf("请输入长度不大于6的密码:");
while(isprint(*cur = getch()))
{
printf("*");
cur++;
}
*cur = '\0';
return pass;
}
㈣ C中在控制台输出字符串后,如何删除其中的一部分
在控制台输出的字符串是不能删除的(输入的话可以更改,直接用删除键就可以),可以在程序中printf();函数中删掉不想输出的字符串。
㈤ linux中如何将文件里的控制字符正确去除
你们老师让做一个编译器,如果碰到你问题中所说的a.cpp,含有光标控制符,报错是对的吧?
那么你要问的是怎么把a.cpp里面的光标控制符去掉?
我不知道脚本怎么写,但是有一个简单的方法,就是cat a.cpp
这样能得到正确的显示,然后选中显示出来的内容,再cat > b.cpp,回车
然后按鼠标中键粘贴刚才选中的内容,然后就ctrl+d
这样b.cpp中的内容就是不含光标控制符的。
不知道是不是符合你的要求。
================================
我明白你的意思了。
我建议不要用cat,cat会把光标控制符也记录下来。
另外,在我的shell里面,通过cat > a.cpp,移动光标并不能真的把光标移到想要的地方,只是在原来显示的文本后面显示^[[A
之类的东西。这样来修改源码也太痛苦了……
或者,能不能调用vim之类的文本编辑器?这样比较方便。
㈥ 删除字符串的某个字符 linux
如果是 Linux 操作系统的话,使用 vi 屏幕编辑命令对文本文件内容进行编辑时,首先按下 ESC 键,把 vi 的编辑状态转换成命令状态。然后通过移动键盘上的光标键,把光标定位在你需要进行删除的任何一个字符上,然后再按小写“x”,即可删除掉光标所在的某个字符。
㈦ C语言 linux下删除最后一个字符
#include
<stdio.h>
int
main(void)
{
printf("abcde");
printf("\b\b
\b\b");/*让光标左移两位(删除两个字符),注意中间有两个空格*/
return
0;
}
******************************************************
如果有大量的对基内于字符界面的GUI操作,容建议使用cruses库进行编程,里面提供了丰富的基于文本的屏幕管理函数。
例如:
#include
<stdio.h>
#include
<curses.h>
int
main(void)
{
initscr();/*初始化curses*/
printw("abcde");/*输出*/
refresh();
move(0,2);/*移动光标位置*/
insch('C');/*在光标当前位置插入字符*/
refresh();
endwin();/*结束curses编程*/
return
0;
}
(
gcc
a.c
-lcurses
)
㈧ Linux C语言如何清除输入缓存
有的时候会遇到这样的一个问题,程序如下
#include
int main(void)
{
int a;
char b;
scanf("%d".&a);
scanf("%c",&b);
printf("%d\n",a);
printf("%c\n",b);
}
如果在终端上输入3
打印如下:
3
打印出一个3和一个空行,我们就输入了一个3,本来还应该再输入一个字符的,这是怎么回事。
原因是当我们输入3后又输入了个回车,C语言取字符都是在字符输入缓冲区中读取的,我们输入3后回车,C语言就把这个回车放在字符缓冲区中,所以第二个scanf读取的是字符缓冲区中的内容。
如果要解决一个最简单的方法就是把这个字符用getchar()读出来抛掉,这个就可以让我们第二次输入字符了,但getchar()只能读一个,如果字符缓冲区中的内容有多个,或者不知道多少个,这就不好办了。
还有一种方法就是在scanf上做文章,C语言的scanf这个输入函数是很奇怪的,如果我把第二个scanf改一下,改成scanf("
%c",&b);%c前面有个空格啊,这个空格是写在前面的,也就是在我们要输入之前,要读空白字符并忽略掉,如果你不输入一有效字符在终端不论按多少个回车空格tab等都是无效的,所以这样的scanf可以帮我们输入有效字符。
如果scanf写成scanf(" %c
",&b);,前后都有一个空格,前加空格已经说过了,那后面加空格会出现什么情,注意,如果在后加个空格,当我们输入一个有效字符回车,发现还没有输完,还要继续输入,这怎么回是。在后面加空格是把我们输入有效字符后面的空白字符忽略了,此时我们必须要输一个有效字符才能终止输入。
再来说一下整型,如果把第一个scanf改成
int c ;
scanf("%d,%d",&a,&c);
输入两个整型的变量,且%d与%d这间有个,号。这种情况下,你在输入第一个数字后必须原样输出一个,号,后面的输入才有效,如果在输入的时候不加,号,在你输入第一个整型数据后,忽略其它所有字符和数字除了,号,加,号后,与紧跟,号后的数据被读入到变量c中,大家可以试,当前,号可以是其它任可字符,%d前后都可以加其它字符,都要原样输出才行。
另外,还可通过加__fpurge(stdin)函数清空输入缓冲区,此函数在头文件中。